否定正则表达式测试而没有“ if”

时间:2019-04-01 14:25:28

标签: bash

好吧,我认为“ bash”是“ bash my head in”的缩写。

知道了:

! [[ $var =~ ^[0-9]+$ ]] && echo "Supply integer values from the menu only. Nothing added." && return;

它不起作用。我必须这样做:

if ! [[ $var =~ ^[0-9]+$ ]]; then
    echo "Supply integer values from the menu only. Nothing added." && return
fi

有没有办法让第一种方法起作用?

更新:原始代码已被编辑。上面编辑的代码可以正常工作。我在尝试弄清楚如何否定正则表达式的过程中犯了一个愚蠢的错误。关闭这个。

3 个答案:

答案 0 :(得分:1)

问题在于操作/操作分组的顺序。您可以使用花括号将操作分组为bash;像这样:

! [[ $var =~ ^[0-9]+$ ]] || { echo "Supply integer values from the menu only. Nothing added." && return; }

请注意,在花括号内的代码末尾,;确实是必需的。

答案 1 :(得分:1)

第二个是:

if ! [[ $var =~ ^[0-9]+$ ]]; then
  echo "Supply integer values from the menu only. Nothing added." && return
fi

所以echo ...在正则表达式不匹配时执行。 但是在第一个示例中,您使用OR(bash中的||):

! [[ $var =~ ^[0-9]+$ ]] || echo "Supply integer values from the menu only. Nothing added." && return;

因此,在! [[ ... ]]表达式失败时执行的回显,与您使用if编写的相反。一样是

! [[ $var =~ ^[0-9]+$ ]] && echo "Supply integer values from the menu only. Nothing added." && return;

答案 2 :(得分:0)

“不起作用”的含义不明显,但您的两个陈述并不相等。

1195$ ! false || echo hello
1196$ ! true || echo hello
hello

1197$ if ! false; then echo hello ; fi
hello
1198$ if ! true; then echo hello ; fi

真假的角色在两种不同用法之间是相反的。