列出使用变量过滤器的文件



我试图在shell bash中使用过滤器列出文件。

result=$(ls *{A1,A2}*.txt)
echo $result 

file1_A1.txt, file2_A2.txt

但是当将过滤器放入变量中时,它不起作用:

filter={A1,A2}
result=$(ls *"$filter"*.txt)
echo $result

ls: cannot access '{A1,A2}': No such file or directory

我用错了sintax。我该怎么修理它?

最好

使用扩展globing:

shopt -s extglob
filter="A1|A2"
result=(*@($filter)*.txt)
echo "${result[@]}"

你可以使用eval来实现你想要的(尽管我不是一个大粉丝;eval应尽可能避免(IMO):

filter="{A1,A2}"
result=$(eval "ls *$filter*.txt")
echo "$result"

如果你坚持使用大括号,可能没有其他方法在任何其他展开(例如变量展开)之前完成。参见man bash,EXPANSIONBrace Expansion章节。

然而,在这个答案中给出了一个可能的解决方案。