2017-06-13 56 views
1

我想列出某些目录中的所有文件,因此我想创建一个包含所有目录的数组,并在循环中递归列出它们。但是,使用变量内的文件模式列出文件[BASH]

ls /home/user/{*.txt,*.sh} 

正确列出所有文件。但是当我使用

location="/home/user/{*.txt,*.sh}" 
ls $location # Error 
ls "$location" # Error 
ls ${location} # Error 

它给了我一个错误说没有这样的文件存在。另外,如果只有location="/home/user/*.sh",第二种方法工作得很好。有人可以帮忙吗?

回答

4

这是因为大括号扩展是在变量替换之前完成的。

https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html#Shell-Expansions

也许以下解决方案可以帮助使用扩展水珠

shopt -s extglob 
location="/home/user/*[email protected](txt|sh)" 
ls $location 

location="/home/user/@(*.txt|*.sh)" 
+0

整洁和简单。不知道扩展的正则表达式字段。谢谢!更多关于它[这里](http://www.linuxjournal.com/content/bash-extended-globbing)。 –

+0

它不是正则表达式,而是glob模式,不同的语法(更弱),如果你可以更新标题更清晰:在问题中它是大括号扩展。 –

相关问题