使用变量内的文件模式列出文件[BASH]

时间:2017-06-13 07:25:54

标签: regex bash shell ls

我想列出某些目录中的所有文件,所以我想创建一个包含所有目录的数组,并在循环中递归列出它们。但是,

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

以下解决方法可能有助于使用扩展的globs

shopt -s extglob
location="/home/user/*.@(txt|sh)"
ls $location

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