【问题标题】:How to assign the parameter list "$@" to another variable?如何将参数列表“$@”分配给另一个变量?
【发布时间】:2010-07-09 12:06:19
【问题描述】:

在 shell 脚本中,我希望变量 p 等于 "$@",以便以下两行代码产生相同的结果:

for x in "$p"; do echo $x; done
for x in "$@"; do echo $x; done

如果我这样做 p=$@p="$@" 这不起作用。 当命令行参数的名称中有空格时,我找不到解决此问题的简单方法(p="$@"for x in $p 的组合(在 $p 周围删除引号)在没有空格时有效)。

【问题讨论】:

    标签: bash shell parameters


    【解决方案1】:

    "$@" 的特殊之处在于,即使它是一个单引号表达式,它也会扩展为零个或多个“单词”。你不能用一个普通的参数来完成同样的事情,但是(使用稍微不同的语法)它可以用一个数组变量/参数来完成(例如在 bashksh , zsh):

    array_var=("$@")
    for x in "${array_var[@]}"; do printf '<<%s>>\n' "$x"; done
    

    【讨论】:

    • @sivann:上面的代码只会在一些位置参数已经建立的情况下打印一些东西(例如,将代码保存到文件并使用额外的参数运行它:bash /path/to/file arg1 'arg2 has spaces')。如果没有更多细节,很难说出您遇到了什么问题。您可能想提出一个新问题,详细说明您正在尝试做什么(以及您已经尝试过什么)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多