【问题标题】:Use file patterns inside a variable to list files [BASH]在变量中使用文件模式来列出文件 [BASH]
【发布时间】:2017-06-13 07:25:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: regex bash shell ls


    【解决方案1】:

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

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

    也许以下解决方法可以帮助使用扩展的 glob

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

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

    【讨论】:

    • 简洁明了。不知道扩展的正则表达式字段。谢谢!更多关于它here.
    • 这不是正则表达式,而是 glob 模式,不同的语法(较弱),如果您可以将标题更新为更清晰:在问题中它是大括号扩展。
    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 2011-04-22
    • 2019-11-24
    • 2012-08-14
    • 2012-01-07
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多