如果你愿意你的运行环境限制到最新版本的bash(或修改代码以支持ksh93的等效语法),
输出
#!/bin/bash
# ^^^^ -- specifically, bash 4.0 or newer
declare -A array # associative arrays need to be declared!
array=([bash]="yes" [cash]="" [trash]="no" [empty]="")
for idx in "${!array[@]}"; do
if [[ ${array[$idx]} ]]; then
echo "$idx is not empty"
else
echo "$idx is empty"
fi
done
遍历键在阵列中,而不是值,语法是"${!array[@]}"
,而不是"${array[@]}"
;如果您只是遍历这些值,则不知道当前正在评估的名称。
或者,假设我们不打算使用数组;另一种方式来设置一个命名空间变量,你打算能够以类似的方式对待是前缀来:
#!/bin/bash
val_bash=yes
val_cash=
val_trash=no
val_empty=
for var in "${[email protected]}"; do
if [[ ${!var} ]]; then
echo "${var#val_} is not empty"
else
echo "${var#val_} is empty"
fi
done
此作品(巴蜀3.x的为好),因为"${[email protected]}"
扩展到变量列表以prefix
和"${!varname}"
开头的名称扩展为变量的内容,其名称本身存储在变量varname
中。
如果你运行'声明-p ARRAY',你会得到像'声明-a ARRAY =“([0] = ”庆典= YES“[1] = ”现金=“ 结果[2 ] =“垃圾=否”[3] =“空=”)“',表明你的密钥是当前的tly'0','1','2'和'3',与'bash','cash','trash'和'empty'的推测值相比。 –