Regex 在变量中使用文件模式列出文件[BASH]
我想列出一些目录中的所有文件,所以我想创建一个包含所有目录的数组,并在循环中递归列出它们。但是,Regex 在变量中使用文件模式列出文件[BASH],regex,bash,shell,ls,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”,第
ls /home/user/{*.txt,*.sh}
正确列出所有文件。但是当我使用
location="/home/user/{*.txt,*.sh}"
ls $location # Error
ls "$location" # Error
ls ${location} # Error
它给我一个错误,说没有这样的文件存在。另外,如果只有
location=“/home/user/*.sh”
,第二种方法也可以正常工作。有人能帮忙吗?这是因为大括号展开是在变量替换之前完成的
也许下面的解决方法有助于使用扩展glob
shopt -s extglob
location="/home/user/*.@(txt|sh)"
ls $location
或
这是因为大括号展开是在变量替换之前完成的 也许下面的解决方法有助于使用扩展glob
shopt -s extglob
location="/home/user/*.@(txt|sh)"
ls $location
或
简洁明了。不知道扩展的正则表达式字段。谢谢更多信息。这不是正则表达式,而是glob模式,不同的语法(较弱),如果你能更新标题使其更清晰:问题是大括号扩展。简洁明了。不知道扩展的正则表达式字段。谢谢更多信息。这不是正则表达式,而是glob模式,不同的语法(较弱),如果你能更新标题使其更清晰:问题是大括号扩展。