来自 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
不会,设置nullglob
shell 选项并且未能展开 glob 模式不会导致脚本以非零退出状态退出(并且将文件名与 glob 模式匹配通常不会更改$?
shell 变量)。
不是设置nullglob
将convert
失败(除非当前目录中存在具有文字名称的文件*.jpg
)*.png
,并且将以退出状态 1 退出。
由于这是脚本中最后执行的命令,因此脚本将以该退出状态退出。
更新有问题的脚本后:
该脚本现在以非零退出状态退出如果由于测试,存在最后一个处理的图像文件的 PDF 文件[ ! -e ... ]
(在这种情况下,这是脚本中执行的最后一个命令)。
如果不需要,请使用
[ ! -e "${basename}.pdf" ] && convert "$i" "${basename}.pdf" || true
(另请注意添加的引用)