代码之家  ›  专栏  ›  技术社区  ›  rafak

如何将参数列表“$@”分配给另一个变量?

  •  1
  • rafak  · 技术社区  · 14 年前

    在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左右的引号)在没有空格的情况下有效。

    1 回复  |  直到 14 年前
        1
  •  9
  •   Chris Johnsen    14 年前

    "$@" 特殊之处在于,即使它是一个单引号表达式,它也会扩展到零个或多个__字__。使用普通参数不能完成相同的事情,但是(使用稍微不同的语法)可以使用数组变量/参数(例如in 猛击 , KSH , ZSH ):

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