如何将@数组分配给bash中的另一个变量?

nat*_*evw 6 arrays variables bash

在如何在 Bash 中复制数组的答案中?,将数组从一个变量复制到另一个变量的解决方案是arrayClone=("${oldArray[@]}")

但是,如果我需要复制的数组是参数列表怎么办@

一个简单的测试脚本,例如:

#! /bin/bash

argsCopy=("${@[@]}")
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

第 3 行:${@[@]}:错误替换

nat*_*evw 7

通过实验,似乎这就argsCopy=("$@")足够了。

当我通过运行以下命令时./test.sh 1 2 3\ 4

#! /bin/bash

set -x
argsCopy=("$@")
echo "${argsCopy[@]}" > /dev/null
Run Code Online (Sandbox Code Playgroud)

它输出:

+ argsCopy=("$@")
+ echo 1 2 '3 4'
Run Code Online (Sandbox Code Playgroud)

然而,就像 sh/bash 中的许多事情一样,我无法解释该语言的哪些规则导致它起作用,或者在什么情况下它可能最终失败。

  • ...顺便说一句,它根本不是合法的 sh,它只是**bash/ksh/&c。支持数组。 (2认同)