BASH 运算符“^”、“|”的含义和条件 ^(n|N)$ 中的“$”

BASH 运算符“^”、“|”的含义和条件 ^(n|N)$ 中的“$”

在我的脚本中,我试图设置“再试一次?[y/N]”条件......

if [[ "$response" =~ ^(n|no)$ ]]; then do something...,

但我不明白这里使用的符号“^”和“$”的含义。我尝试了简单的方法[[ if $response =~ (n|no) ]]并且它有效,但是如果我输入类似“nein”的内容,它仍然有效......我将管道(|)作为“OR”运算符,但这也可能是错误的。

有人能给我解释一下整个状况的含义吗?它有效,但我也想知道含义...非常感谢。

答案1

这些是正则表达式特殊字符。

^是字符串开头的锚点(所以匹配之前不能有任何内容)

$是字符串末尾的锚点(因此匹配后不能有任何内容)

|是 OR 正如你怀疑的那样

告诉=~bash 扩展测试,右侧的字符串是扩展正则表达式,并且将以 0 表示匹配退出,以 1 表示其他任何内容。

[[ if $response =~ (n|no) ]]是有缺陷的,因为 if 应该在括号之外,但假设这是问题中的拼写错误,如果响应包含 an ,它就会成功n。您可能需要开始和结束锚点,以便仅有的 nno将匹配。

相关内容