Bash 为什么支票没有像我期望的那样有效?

Bash 为什么支票没有像我期望的那样有效?,bash,Bash,使用Bash4.2,我有一个关联数组 我想检查键上的值是否包含字符串。为此,在此基础上,, 我做了以下工作: ERRORS[TEST]="TEST" if [[ ! ERRORS[TEST] =~ "TEST" ]]; then echo "failed" else echo "succeed" fi 这应该是echo失败了,但它是echo成功了 在这种行为中我遗漏了什么或不理解什么?如果我的方法是错误的,我如何实现这一点?使用${ERRORS[TEST]}。这是获取关联数组值

使用Bash4.2,我有一个关联数组

我想检查键上的值是否包含字符串。为此,在此基础上,, 我做了以下工作:

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中使用引号并没有什么坏处