Linux bash:如何正确使用eval命令?

时间:2017-08-19 20:26:50

标签: linux bash shell

我可以在Linux命令行上运行以下命令,它正确列出了所有具有ABC和XYZ前缀的文件:

    ls {ABC-,XYZ-}*.xml

    Result: ABC-01.xml  ABC-02.xml  ABC-03.xml  XYZ-01.xml  XYZ-02.xml

现在,我想我可以使用如下变量:

    file_pfx={ABC-,XYZ-}

然后使用" ls"中的变量。命令结合" eval":

    eval 'ls ${file_pfx}*.xml'

    Result: ls: {ABC-,XYZ-}*.xml: No such file or directory

我做错了什么?

由于

3 个答案:

答案 0 :(得分:4)

不要使用eval。你可以使用扩展的globbing:

#! /bin/bash
shopt -s extglob
prefix='ABC-|XYZ-'
ls @($prefix)*.xml

答案 1 :(得分:3)

我建议你使用数组

$ touch ABC-01.xml  ABC-02.xml  ABC-03.xml  XYZ-01.xml  XYZ-02.xml

$ files=( {ABC-,XYZ-}*.xml )

$ printf "%s\n" "${files[@]}"
ABC-01.xml
ABC-02.xml
ABC-03.xml
XYZ-01.xml
XYZ-02.xml

答案 2 :(得分:1)

您应该使用双引号来允许变量扩展($file_pfx):

eval "ls ${file_pfx}*.xml"

请注意,我假设您的文件名不包含空格。

无论如何,请谨慎使用eval