好吧,我认为“ 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
有没有办法让第一种方法起作用?
更新:原始代码已被编辑。上面编辑的代码可以正常工作。我在尝试弄清楚如何否定正则表达式的过程中犯了一个愚蠢的错误。关闭这个。
答案 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
真假的角色在两种不同用法之间是相反的。