linux - 将 [[ ]] 命令转换为测试表达式格式

标签 linux bash

假设您让用户输入数字 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/

相关文章:

java - NFS 客户端锁定当前正在远程 NFS 服务器中写入的文件

java - 从 Java 程序运行 grep

mysql - sudo systemctl start 返回 "Failed to wait for response: Success"

linux - 使用 Bash 读取文件然后使用针对文件本身的行执行 "grep"

bash - 如何使用 bash 命令剪切字符串

Bash:如何区分符号字符和变量名称?

linux - 在 Linux 上读取 USB 批量消息

php - ORA-12154 PHP OCI8 悲痛

bash - 使用 tr 删除特定字符串

bash - 使用远程数据制作 Cobra 标志 bash 完成