运行 命令用 if 检查的两种方式

Two ways of running a command checked with if

这两个都有效。第一个更短,但我猜第二个更安全或更好 - 运行 $()

中的命令

如果是这样,谁能解释为什么第二种更安全、更好等等。

if my_function "something" ; then ...

if $(my_function "something"); then ...

第一个通常是您想要的。第一个执行函数,检查其退出状态,如果状态指示函数成功,则 运行 进入 then 部分。

第二个(与 $( ))运行s 函数,捕获函数打印到标准输出的任何内容,然后尝试将该输出作为另一个命令执行。如果它不输出任何内容,则没有任何内容 运行,因此如果您的函数成功(就像第一个版本),则会执行 then 部分。另一方面,如果它确实输出了任何东西,那会得到 运行 作为另一个命令,如果 that 成功,then 部分得到 运行。如果它打印的不是有效命令,则视为失败。

所以,问题是,您的函数是否打印了您要执行的命令?如果是这样,请使用第二种形式。不行,用第一个。