bash - shell $@ 变量赋值和迭代

标签 bash shell sh

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
}

关于bash - shell $@ 变量赋值和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622771/

相关文章:

bash - 参加考试并在线粘贴

linux - 试运行一个有潜在危险的脚本?

bash - 如何确定我所在的当前交互式 shell(命令行)

bash - 语法错误: “(” unexpected in bash script

string - echo -n $"some string"与 echo -n "some string"有何不同

linux - 在 bash -c 中设置变量

bash - 强制 "date"使用机器默认设置以外的语言环境

linux - 如何检查shell脚本是否有足够的权限运行

c++ - 如何将 makefile 从生成可执行文件更改为生成共享库

java - 如何将 java 方法的输出分配给 bash 脚本变量