Bash 为什么支票没有像我期望的那样有效?
使用Bash4.2,我有一个关联数组 我想检查键上的值是否包含字符串。为此,在此基础上,, 我做了以下工作:Bash 为什么支票没有像我期望的那样有效?,bash,Bash,使用Bash4.2,我有一个关联数组 我想检查键上的值是否包含字符串。为此,在此基础上,, 我做了以下工作: ERRORS[TEST]="TEST" if [[ ! ERRORS[TEST] =~ "TEST" ]]; then echo "failed" else echo "succeed" fi 这应该是echo失败了,但它是echo成功了 在这种行为中我遗漏了什么或不理解什么?如果我的方法是错误的,我如何实现这一点?使用${ERRORS[TEST]}。这是获取关联数组值
ERRORS[TEST]="TEST"
if [[ ! ERRORS[TEST] =~ "TEST" ]]; then
echo "failed"
else
echo "succeed"
fi
这应该是echo失败了,但它是echo成功了
在这种行为中我遗漏了什么或不理解什么?如果我的方法是错误的,我如何实现这一点?使用
${ERRORS[TEST]}
。这是获取关联数组值的方法
错误[TEST]
只会返回原样的代码
顺便说一句,当错误[TEST]=“TEST”
时,代码应回显“success”。因为你有一个代码>在它前面,这意味着当变量不包含“TEST”时,它回显“failed”。它将呼应“成功”,因为它实际上包含一个
顺便说一句,如果您使用ERRORS[TEST]
而不是${ERRORS[TEST]}
,它也会回显“succeed”。但它不能正常工作,因为无论变量的实际值如何,“ERRORS[TEST]”中都包含“TEST”,因此它总是会返回“success”。要访问数组索引,请使用:“${ERRORS[TEST]}”
@anubhava:在引号中?也许这与[[
没有关系,但对于一个老程序员来说,这感觉很马虎(而[[
内部的语法与正常的语法不同是我真正不喜欢[[
)的原因之一。是的,我的意思是只为[…]
,尽管总是在shell中使用引号并没有什么坏处