我可以在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
我做错了什么?
由于
答案 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
。