文件名扩展无法匹配任何文件是否会导致脚本以 1 退出?

文件名扩展无法匹配任何文件是否会导致脚本以 1 退出?

来自 Bash 手册,对于文件名扩展:

如果nullglob设置了该选项,但未找到匹配项,则该单词将被删除。

我的以下脚本将返回退出状态 1。

  • 文件名扩展无法匹配当前目录中的任何 jpg 文件是否会导致我的脚本以 1 退出?

  • 如何排除退出状态 1 的其他可能性?

谢谢。

shopt -s nullglob

for i in *.{png,jpg};
do
    filename=${i##*/}
    basename=${filename%.*}
    [ ! -e ${basename}.pdf ] && convert  "$i"  ${basename}.pdf ;
done

答案1

不会,设置nullglobshell 选项并且未能展开 glob 模式不会导致脚本以非零退出状态退出(并且将文件名与 glob 模式匹配通常不会更改$?shell 变量)。

不是设置nullglobconvert失败(除非当前目录中存在具有文字名称的文件*.jpg*.png,并且将以退出状态 1 退出。

由于这是脚本中最后执行的命令,因此脚本将以该退出状态退出。


更新有问题的脚本后:

该脚本现在以非零退出状态退出如果由于测试,存在最后一个处理的图像文件的 PDF 文件[ ! -e ... ](在这种情况下,这是脚本中执行的最后一个命令)。

如果不需要,请使用

[ ! -e "${basename}.pdf" ] && convert "$i" "${basename}.pdf" || true

(另请注意添加的引用)

相关内容