LinuxBash:如何正确使用eval命令?
我可以在Linux命令行上运行以下命令,它会正确列出所有具有ABC和XYZ前缀的文件: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
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.