shell $@ 变量赋值和迭代

shell $@ variable assignment and iteration

function f() {
    for arg; do
        echo "$arg"
    done
}

f 'hello world' 'second arg' '3rdarg'

这很好用:

hello world
second arg
3rdarg

但是我什么时候把$@赋值给某个变量,然后就出错了:

function f() {
    local args="$@"
    for arg in "$args"; do
        echo "$arg"
    done
}

输出:

hello world second arg 3rdarg

当我取消引用 $args 时,每个参数都被拆分成一个单词:

hello
world
second
arg
3rdarg

最后,我想知道有没有办法像$@这样定义变量。如有任何回复,我们将不胜感激。

您需要使用数组:

function f() {
    local args=("$@")             # values in parentheses
    for arg in "${args[@]}"; do   # array expansion syntax
        echo "$arg"
    done
}