#!/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行将数组中的a /值设置为null并将其从数组中删除,因此将=""
删除。但是,按原样使用代码,因为${movelist[$movecheck]}
会产生一个变量c*1
,因此在将其声明为null时会吐出c41= command not found
。我尝试使用eval并声明:eval "declare "${movelist[$movecheck]}"=''"
,但是这样做不是从数组中删除值,而是更改了实际变量。因此,上面示例代码的结果应该是movelist
数组的末尾包含(c21 c41)
。干杯。
答案 0 :(得分:1)
使用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]
是您想要的。