有时,在创建条件语句时,我需要代码不执行任何操作,例如,在这里,我希望Bash在$a
大于“ 10”时不执行任何操作,如果$a
小于“ 5”,则打印“ 1”,否则,请打印“ 2”:
if [ "$a" -ge 10 ]
then
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
但是,这会导致错误。有没有什么用的命令也不会减慢我的脚本的速度吗?
Answers:
Shell中的no-op命令是:
(冒号)。
if [ "$a" -ge 10 ]
then
:
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
从bash手册:
:
(冒号)
除了扩展参数和执行重定向之外,什么也不做。返回状态为零。
:
是由我们团队中的某人编写的,那么我会请他们进行更改。
true
在无条件的上下文中使用,我希望他们进行更改。if true
很好,then true
似乎错了。
if ! condition; then do something; fi
而不是if condition; then :; else do something; fi
。
您可能只需要使用以下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
true
并且false
就脚本而言实际上是无操作的,则原则上它们可以放入接受此语法的一些shell中,所以也许:
更好。
true
并且false
是内置的。对于较旧的贝壳,true
,false
,甚至:
可能是外部命令(虽然你可能只看到后者很旧壳)。
:
仅仅因为它的意图是更明确的
尽管我没有回答有关no-op命令的原始问题,但是可以通过简单地重组逻辑来绕过许多(如果不是大多数)问题,当人们认为“在该分支中我什么都不要做”时,可以绕过该问题,从而使该分支获胜不会发生。
我尝试通过使用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
只是上述内容的一种变体,将$a < 10
条件中的所有内容都包含在内:
if [ "$a" -lt 10 ]
then
if [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
fi
(对于这个特定的示例,@ Flimzys的重组当然更好,但是我想为所有寻求不采取任何措施的人们提供一个通用规则。)
echo "put stuff here"
它会破坏一些非登录用途(例如scp被破坏),只有空格/注释会导致运行时错误。
true
。它内置在外壳中,什么也不做。