gpt4 book ai didi

bash - 在 shell 脚本中没有 unless 吗?

转载 作者:行者123 更新时间:2023-11-29 09:28:16 26 4
gpt4 key购买 nike

我尝试在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com