我是壳牌的绿手。请参阅我的以下代码。如何使它工作?
[root@localhost ~]# ls {*.txt,*.exe}
a.txt b.txt a.exe b.exe
[root@localhost ~]# filter={*.txt,*.exe}
[root@localhost ~]# echo $filter
{*.txt,*.exe}
[root@localhost ~]# ls $filter
ls: {*.txt,*.exe}: No such file or directory
[root@localhost ~]#
答案 0 :(得分:5)
这应该可以解决问题:
eval ls $filter
答案 1 :(得分:2)
注意:在没有任何具体信息的情况下假设Bash和Linux。
首先,您可以通过find
获取此信息,例如
find -type f -name '*.sql'
...或echo
:
echo *.{sql,log}
也是。在* nix shell中做一件事的很多方法:)
其次,您必须eval
表达式才能使用globbing功能(globbing是通配符扩展的技术术语)。
您还希望将作业用单引号括起来,以避免过早发生扩展:
filter='*.{sql,log}'
然后观察:
$ echo $filter
*.{sql,log}
但:
$ eval "echo $filter"
test.sql test.log