在变量中使用文件模式来列出文件 [BASH]
Use file patterns inside a variable to list files [BASH]
我想列出某些目录中的所有文件,所以我想创建一个所有目录的数组并在循环中递归列出它们。但是,
ls /home/user/{*.txt,*.sh}
正确列出所有文件。但是当我使用
location="/home/user/{*.txt,*.sh}"
ls $location # Error
ls "$location" # Error
ls ${location} # Error
它给我一个错误,说不存在这样的文件。此外,如果只有 location="/home/user/*.sh"
,第二种方法也能正常工作。有人可以帮忙吗?
这是因为大括号扩展是在变量替换之前完成的。
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)"
我想列出某些目录中的所有文件,所以我想创建一个所有目录的数组并在循环中递归列出它们。但是,
ls /home/user/{*.txt,*.sh}
正确列出所有文件。但是当我使用
location="/home/user/{*.txt,*.sh}"
ls $location # Error
ls "$location" # Error
ls ${location} # Error
它给我一个错误,说不存在这样的文件。此外,如果只有 location="/home/user/*.sh"
,第二种方法也能正常工作。有人可以帮忙吗?
这是因为大括号扩展是在变量替换之前完成的。
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)"