【问题标题】:Change values of array that is a copy of argument array更改作为参数数组副本的数组的值
【发布时间】:2017-08-27 02:30:53
【问题描述】:

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

知道是什么导致了这种行为,我该如何解决?

【问题讨论】:

    标签: arrays bash sh


    【解决方案1】:

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

    一般来说,这是复制数组的正确方法:

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

    【讨论】:

      【解决方案2】:

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

      list=("$@")
      

      【讨论】:

      • 是的,就是这样。只需将参数列表包装在 parens 中即可。
      猜你喜欢
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2021-04-01
      • 2011-09-30
      相关资源
      最近更新 更多