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重组肯定是更好的,但我想给所有的人寻找一个通用的规则什么都不做。)