【问题标题】:Convert [[ ]] command to test expression format将 [[ ]] 命令转换为测试表达式格式
【发布时间】:2017-03-29 19:36:34
【问题描述】:

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

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

但是你将如何使用它:

test expression

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

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

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

【问题讨论】:

标签: linux bash


【解决方案1】:

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

【讨论】:

  • 酷!这就是我一直在寻找的。谢谢。
【解决方案2】:

您可以像这样在 Bash 中使用正则表达式:

echo -n "Your answer> "
read REPLY
if [[ $REPLY =~ ^[0-9]+$ ]]; then
    echo Numeric
else
    echo Non-numeric
fi

请查看帖子Using Bash's regular expressions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-16
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多