bash - 这些 shell 脚本字符 ( || : ) doing anything useful?

标签 bash shell unix sh

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

#!/bin/sh

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

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

#!/bin/sh

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

最佳答案

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

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

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

一般来说,包括|| true 即使您没有在 -e 下运行也可能有好处,原因有二:

  • 使其与 -e 兼容,以防它被更改为在 -e 下运行。
  • 为阅读 shell 脚本的人提供文档,表明您意识到此命令可能会失败并且这种失败是明确的。

关于bash - 这些 shell 脚本字符 ( || : ) doing anything useful?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13538611/

相关文章:

python - 如何使用ImageMagick覆盖特殊框架中的图片?

java - 无法从 Shell 包含 sshpass 的 Java 调用 shell 脚本

ruby - 按名称查找进程 ID

linux - 正则表达式集中的 sed 或运算符

bash - 嵌套 if/else 的 zsh 脚本解析器错误

linux - 如何在 bash 脚本中排序?

linux - 创建服务tomcat - 启动和关闭

linux - 如何在 bash 脚本中正确地将文件名传递给其他程序?

linux - 在 Linux 中获取字符之间的字符串

linux - 如果它显示 > 符号,我如何恢复我在终端上的最后选择?