shell $ @变量分配和迭代

oxn*_*xnz 6 bash shell sh

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

f 'hello world' 'second arg' '3rdarg'
Run Code Online (Sandbox Code Playgroud)

这工作正常:

hello world
second arg
3rdarg
Run Code Online (Sandbox Code Playgroud)

但是我什么时候分配$@一些变量,然后出错:

function f() {
    local args="$@"
    for arg in "$args"; do
        echo "$arg"
    done
}
Run Code Online (Sandbox Code Playgroud)

输出:

hello world second arg 3rdarg
Run Code Online (Sandbox Code Playgroud)

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

hello
world
second
arg
3rdarg
Run Code Online (Sandbox Code Playgroud)

最后,我想知道是否存在定义$ @之类的变量的方法。任何答复将不胜感激。

gle*_*man 5

您需要使用一个数组:

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