这些shell脚本字符(||:)有什么用处吗



我有一个小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脚本的人的文档,你意识到这个命令可能会失败,而且这种失败显然是可以的

相关内容

  • 没有找到相关文章

最新更新