在我的脚本中,我试图设置“再试一次?[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
。您可能需要开始和结束锚点,以便仅有的 n
或no
将匹配。