很多SH代码看起来像:

$cmd
if [ $? = 0 ]; then $cmd2; fi

代替:

if $cmd; then $cmd2; fi

我通常假定人们使用前者,只是因为他们不知道的是,后者的语法是有效的,但我不知道是否还有另外一个原因(虽然我想到的唯一的可能就是便携性)。没有任何理由,更喜欢显式引用$ {?}?

有帮助吗?

解决方案

您必须引用$?,如果你真的想使用的东西,错误代码(日志,处理预期错误等)。对于你提到的具体情况,第二if结构既清晰,短,我看不出有什么理由不使用它。

其他提示

在我看来,因为很多人没有意识到,你可以测试命令或多或少为你做的状态。同样,人们还没有意识到,你可以写:

if cmd1
   cmd2
   cmd3
then
    ...do this after executing cmd1, cmd2 and cmd3, but ...
    ...only if cmd3 exits with with status 0!
fi

您还可以简化代码(在简洁的成本)为:

cmd1 && cmd2

(I见@shin注意到这在注释中,我已经向上投票)。

我也看到很多“伯恩”壳代码,使用:

if ( ... )
then ...
fi

有时这是适当 - 但大多数情况下是东西,一个C壳程序员写到没有意识到符号的意思是“运行一个子壳”布赫纳壳和衍生物 - 如Korn外壳中,符合POSIX标准的壳,和击。

<德尔>因为正在测试的命令的状态标记,而不是从指令测试输出。

如果命令打印到stdout,而是设置一个标志,你会得到你所给出的两个例子得到不同的结果。

我站在纠正,测试它之后。我以为我记得在Solaris上运行了一个问题几年前,但我不能在机器下重新目前,我有访问除用于测试(ksh下):

如果[$cmd]

有很多人不知道,后者更优雅的形式。 我之前提到这一点: http://www.pixelbeat.org/programming/shell_script_mistakes.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top