带参数扩展的Shell通配符

时间:2012-03-02 04:03:34

标签: bash shell

我是壳牌的绿手。请参阅我的以下代码。如何使它工作?

[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 ~]# 

2 个答案:

答案 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