假设您让用户输入数字0-3并想要测试它。最常见的方式似乎是:
[[ $var =~ ^[0-3]$ ]]
但是你如何使用它:
test expression
我的初步尝试没有正确评估,例如
read -p "Enter selection [0-3] > "
if test $REPLY == '^[0-3]$' ; then
...
它只是将if
语句评估为false。
答案 0 :(得分:0)
你可以在Bash中使用正则表达式:
echo -n "Your answer> "
read REPLY
if [[ $REPLY =~ ^[0-9]+$ ]]; then
echo Numeric
else
echo Non-numeric
fi
请查看帖子 Using Bash's regular expressions 。
答案 1 :(得分:0)
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