假设您让用户输入数字 0-3 并想要对其进行测试。最常见的方式似乎是:
[[ $var =~ ^[0-3]$ ]]
但是您将如何使用它:
test expression
我最初的尝试没有正确评估,例如
read -p "Enter selection [0-3] > "
if test $REPLY == '^[0-3]$' ; then
...
它只是将 if
语句评估为 false。
最佳答案
test
等同于[ ]
结构,但不等同于[[ ]]
,它是一个扩展版本。正则表达式 =~
仅在扩展测试中可用,因此对于简单的 test
或 [ ]
您必须从其他地方提取正则表达式评估。
一个修复方法是 grep
。此管道将捕获并打印匹配项:
echo "$REPLY" | grep '^[0-3]$'
如果字符串不为空,则对字符串使用 test
会得到肯定的评估。比较这两个:
test "" && echo ok
和
test "a" && echo ok
知道了这一点,现在可以很容易地从这两个元素构建一个复合测试。
test "$(echo "$REPLY" | grep '^[0-3]$')"
这可以应用于脚本:
read -p "Enter selection [0-3] > "
if test "$(echo "$REPLY" | grep '^[0-3]$')"; then
...
fi
关于linux - 将 [[ ]] 命令转换为测试表达式格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43038074/