bash - Bash:如何在不更改变量的情况下更改包含变量的数组中的值
问题描述
#!/bin/bash
c21=Apples
c31=Oranges
c41=Pears
movelist=(c21 c31 c41)
for movecheck in ${!movelist[@]} ; do
eval "declare movecontents=$"${movelist[$movecheck]}""
if [ "$movecontents" != "Oranges" ] ; then
"${movelist[$movecheck]}"=""
fi
done
echo ${movelist[@]}
我的目标是让第 9 行将数组中的值设置为 null / 将其从数组中删除,因此=""
. 但是,由于代码原样,因为${movelist[$movecheck]}
结果是一个变量,c*1
,当将其声明为 null 时,它会吐出c41= command not found
。我尝试使用 eval & declare: eval "declare "${movelist[$movecheck]}"=''"
,但是这样一来,它并没有从数组中删除值,而是更改了实际变量。所以上面示例代码的结果应该在最后movelist
包含数组(c21 c41)
。干杯。
解决方案
用于unset
删除数组元素:
$ a=(a b c d)
$ declare -p a
declare -a a=([0]="a" [1]="b" [2]="c" [3]="d")
$ unset a[2]
$ declare -p a
declare -a a=([0]="a" [1]="b" [3]="d")
所以:unset movelist[$movecheck]
是你想要的。
推荐阅读
- c# - 从 MVVM 中的 viewModel 绑定到视图
- flutter - 输入'未来
' 不是 'Widget' 类型的子类型 问题 - angular - 如何将全局默认面板类添加到角度材质选择?
- r - 在数据中按组创建比率作为新列
- android - 无法读取整个标题;读取 353 字节;预期 512 字节
- javascript - 在 Suitescript 中删除供应商信用?
- java - 改造 POST 对象列表和列表
- r - 如何整理调查数据以便创建反应式条形图?
- c# - 如何阅读 MS Teams 版本
- wordpress - 为什么我的页面显示在浏览器中,但显示 404 服务器响应?是htaccess吗?