2

我有一个小 shell 脚本,可以在指定目录中运行任何可执行文件,同时传递两个参数:

#!/bin/sh

cd '/foo'
for s in bar/*;
do [ -x $s ] && $s "$1" "$2" || : ;
done

|| :位是否有任何用途?我希望异步启动可执行文件,所以我将其更改;为 a &,但是有什么理由我不应该这样做:

#!/bin/sh

cd '/foo'
for s in bar/*;
do [ -x $s ] && $s "$1" "$2" &
done
4

1 回答 1

6

|| :(通常拼写为|| true)表示您不在乎命令是否成功。它强制返回成功状态 ( $?)。

最好在 shell-e选项下运行 shell 脚本,这样错误就不会被忽视。此选项可以在 shebang 行 ( #!/bin/sh -e) 或脚本本身 ( set -e) 上激活。它会导致错误中止脚本的执行。

由于在这种情况下您没有在 下运行-e,因此|| :不会有所不同,因为如果命令失败,shell 无论如何都会忽略结果代码。此外,在这种情况下,您正在后台运行命令,因此检查返回码甚至没有意义。

一般来说,包括|| true即使你没有运行-e也有好处,原因有两个:

  • 为了使其兼容,-e以防万一它被更改为在-e.
  • 作为阅读 shell 脚本的人的文档,您意识到此命令可能会失败并且这种失败是明确的。
于 2012-11-24T06:00:00.133 回答