我正在尝试更改作为参数数组("$@"
(副本的数组中的值。假设我按如下方式执行脚本:$ 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=("$@")