我尝试在 shell 中执行与 if 相反的操作,仅在散列中的值不存在时才执行某些操作。我从这里学会了在 bash 中创建哈希:Associative arrays in Shell scripts
declare -A myhash
我声明了一个简单的散列:
myhash[$key]="1"
和
[ ${myhash[$key]+abc} ]
从这里查看 myhash[$key] 是否存在:Easiest way to check for an index or a key in an array?
我也学会了加法!在表达式前面做相反的 if 子句从这里:How to make "if not true condition"?
但是下面的表达式
if ! [ ${myhash[$key]+abc} ]; then
echo $key
fi
不工作,不打印任何信息。没有错误信息。
我试过这个:
[ ${myhash[$key]+abc} ] && echo $key
得到错误信息:
abc: command not found
谁能告诉我如何让它工作?
最佳答案
首先是这个
[ ${myhash[$key]+abc} ]
会测试参数展开的结果是否为空。 ${myhash[$key]}
存在并扩展为一个字符串(它本身可能为空也可能不为空),或者它不存在并扩展为字符串“abc”。假设你没有设置 myhash[$key]=""
,扩展总是产生一个非空字符串,所以命令成功。因此,
! [ ${myhash[$key]+abc} ]
总是会失败。
假设“abc”不是 myhash
中的有效条目,您需要实际检查参数是否扩展为实际值,或者“abc”是否为未设置的键:
if [[ ${myhash[$key]+abc} == abc ]]; then
echo "$key does not exist in myhash"
else
echo "myhash[$key]=${myhash[$key]}"
fi
关于bash - 在 shell 脚本中没有 unless 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888393/