【问题标题】:Bash: iterating over argument filesBash:迭代参数文件
【发布时间】:2012-07-22 03:28:33
【问题描述】:

这可能是一个简单的答案,但在谷歌搜索之后,我可能只是记下了术语,所以我还没有找到任何关于我要问的内容。

当接受 /bin/*.txt 之类的参数时,如何遍历每个文件?

我试过这个:

for file in $2; do
    echo $file
done

第二个参数 ($2) 有一个输入,例如 /bin/*.txt,但 echo 只打印出我拥有的 6 个文本文件中的 1 个。我是否错误地迭代了这个?

我也尝试过这样使用 ls ,它也不会正确打印出来......

ls $2

【问题讨论】:

    标签: bash argument-passing


    【解决方案1】:

    除非参数被引用,否则参数/bin/*.txt 将在您的脚本看到之前被扩展。因此,如果参数仍然是/bin/*.txt,则可以确定没有与该 glob 匹配的文件。否则,您将有多个参数匹配所有匹配的文件,您可以只使用参数:

    for file; do # equivalent to for file in "$@"
        echo "$file"
    done
    

    如果你想引用参数,你必须自己扩展它。数组是一种不错的方法:

    arg='/bin/*.txt'
    files=( $arg )
    for file in "${files[@]}"…
    

    【讨论】:

    • 如果我想做一个特定的函数调用并且传入的第二个参数是列表,你会如何建议遍历文件?从第二个开始的参数迭代器?
    • 好的,所以我只是对你的代码使用了一个转变,它似乎工作正常。感谢您的帮助!
    • @user1470511 假设您的意思是第二个到最后一个参数是文件列表,您可以在将第一个参数分配给名称后使用shiftfirst_arg="$1"; shift;。在此之后,"$@" 将包含您的参数列表。
    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 2022-01-08
    • 2010-09-20
    • 1970-01-01
    • 2022-08-02
    • 2018-09-07
    相关资源
    最近更新 更多