BASH中的条件是什么命令意味着什么都不做?
有时候在编写条件的时候,我需要的代码什么也不做,比如在这里,当$a
大于“10”时,BASH什么都不做,如果$a
小于“5”,打印“1”,否则打印“2”:
if [ "$a" -ge 10 ] then elif [ "$a" -le 5 ] then echo "1" else echo "2" fi
这虽然造成一个错误。 有一个什么都不做的命令,不会减慢我的脚本吗?
shell中的no-op命令是:
冒号)。
if [ "$a" -ge 10 ] then : elif [ "$a" -le 5 ] then echo "1" else echo "2" fi
从bash手册 :
:
冒号)
除了扩展参数和执行redirect以外,什么都不要做。 返回状态为零。
你可以使用true
命令:
if [ "$a" -ge 10 ]; then true elif [ "$a" -le 5 ]; then echo "1" else echo "2" fi
在你的例子中(但不一定是在任何地方),另一种方法是重新命令你的if / else:
if [ "$a" -le 5 ]; then echo "1" elif [ "$a" -lt 10 ]; then echo "2" fi
尽pipe我没有回答原来的问题,但是我认为“ 在这个分支中我不得不做什么 ”的许多(如果不是大多数的话)问题可以通过简单地重组逻辑来绕开,以便这个分支赢得了不会发生。
我尝试通过使用OP示例来给出一个通用规则
当$ 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
只是上面的一个变种,将所有内容都包含在$a < 10
条件中:
if [ "$a" -lt 10 ] then if [ "$a" -le 5 ] then echo "1" else echo "2" fi fi
(对于这个具体的例子@Flimzys重组肯定是更好的,但我想给所有的人寻找一个通用的规则什么都不做。)