更改作为参数数组副本的数组的值



我正在尝试更改作为参数数组("$@"(副本的数组中的值。假设我按如下方式执行脚本:$ sh script.sh 1 2 3

这是脚本:

list="$@"
echo ${list[*]}
list[1]=4
echo ${list[*]}

预期产出:

1 2 3
1 4 3

我实际得到的:

1 2 3
1 2 3 4

知道是什么原因导致此行为以及如何解决它吗?

list="$@" list设置为普通变量,而不是数组。改用list=("$@")将其存储为数组。顺便说一句,您通常应该使用 "${list[@]}" 来获取数组的元素,而不是${list[*]}以避免元素中的空格、通配符扩展到匹配文件列表等问题。

通常,这是复制数组的正确方法:

copyarray=("${oldarray[@]}")

刚找到这个答案。命令行参数数组不是一个普通的数组,必须首先转换为实际数组,如下所示:

list=("$@")

相关内容

  • 没有找到相关文章

最新更新