转换[[]]命令以测试表达式格式

时间:2017-03-27 04:40:57

标签: linux bash

假设您让用户输入数字0-3并想要测试它。最常见的方式似乎是:

[[ $var =~ ^[0-3]$ ]]

但是你如何使用它:

test expression

我的初步尝试没有正确评估,例如

read -p "Enter selection [0-3] > "
if test $REPLY == '^[0-3]$' ; then
...

它只是将if语句评估为false。

2 个答案:

答案 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