Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LinuxBash:如何正确使用eval命令?_Linux_Bash_Shell - Fatal编程技术网

LinuxBash:如何正确使用eval命令?

LinuxBash:如何正确使用eval命令?,linux,bash,shell,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”组合使用: 我做错了什么 谢谢您应该使用双引号来允许变量扩展($file\u pfx

我可以在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”组合使用:

我做错了什么

谢谢

您应该使用双引号来允许变量扩展(
$file\u pfx
):

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

无论如何,要小心使用
eval

您应该使用双引号来允许变量展开(
$file\u pfx
):

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


无论如何,要小心使用
eval

不要使用eval。您可以改为使用扩展全局搜索:

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

不要使用eval。您可以改为使用扩展全局搜索:

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

我建议你使用数组

$ 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

我建议你使用数组

$ 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

如果任何文件名包含空格,则该选项将不起作用如果任何文件名包含空格,则该选项将不起作用您无法将带大括号的表达式i存储在变量中,因为大括号展开发生在参数替换之前。请参阅。在实际使用
eval
之前,请参阅感谢包含完整测试用例和输出+1不能将大括号表达式i存储在变量中,因为大括号展开发生在参数替换之前。请参阅。在实际使用
eval
之前,请参阅感谢包含完整测试用例和输出+1.