Vil*_*age 156 bash conditional no-op
有时在制作条件时,我需要代码什么都不做,例如,在这里,我希望Bash在$a
大于"10" 时什么也不做,如果$a
小于"5" 则打印"1 ",否则,打印"2":
if [ "$a" -ge 10 ]
then
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
Run Code Online (Sandbox Code Playgroud)
这会产生错误.是否有一个命令什么都不做,也不会减慢我的脚本?
Bar*_*mar 299
shell中的no-op命令是:
(冒号).
if [ "$a" -ge 10 ]
then
:
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
Run Code Online (Sandbox Code Playgroud)
从bash手册:
:
(冒号)
除了扩展参数和执行重定向之外什么都不做.返回状态为零.
Fli*_*mzy 34
你可以只使用true
命令:
if [ "$a" -ge 10 ]; then
true
elif [ "$a" -le 5 ]; then
echo "1"
else
echo "2"
fi
Run Code Online (Sandbox Code Playgroud)
在您的示例情况下(但不一定无处不在),另一种方法是重新订购if/else:
if [ "$a" -le 5 ]; then
echo "1"
elif [ "$a" -lt 10 ]; then
echo "2"
fi
Run Code Online (Sandbox Code Playgroud)
虽然我没有回答原来提出的无操作命令的问题,但是当人们可能认为" 在这个分支中我不得不做什么 " 时,许多(如果不是大多数)问题可以通过简单地重构逻辑来绕过,以便该分支获胜不会发生.
我尝试使用OPs示例给出一般规则
当$ a大于"10"时什么都不做,如果$ a小于"5"则打印"1",否则打印"2"
我们必须避免一个分支$a
超过10 的分支,因此$a < 10
一般条件可以适用于所有其他条件.
一般来说,当你说X时什么都不做的时候,那就把它改成为避免X所在的分支.通常,您可以通过简单地否定X并将其应用于所有其他条件来避免发生.
因此,应用规则的OP示例可能会重构为:
if [ "$a" -lt 10 ] && [ "$a" -le 5 ]
then
echo "1"
elif [ "$a" -lt 10 ]
then
echo "2"
fi
Run Code Online (Sandbox Code Playgroud)
只是上面的变体,将所有内容都包含在$a < 10
条件中:
if [ "$a" -lt 10 ]
then
if [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
fi
Run Code Online (Sandbox Code Playgroud)
(对于这个具体的例子,@ Flimzys重组当然更好,但我想为所有搜索如何做什么的人提供一般规则.)