![文件名扩展无法匹配任何文件是否会导致脚本以 1 退出?](https://linux22.com/image/118618/%E6%96%87%E4%BB%B6%E5%90%8D%E6%89%A9%E5%B1%95%E6%97%A0%E6%B3%95%E5%8C%B9%E9%85%8D%E4%BB%BB%E4%BD%95%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E4%BC%9A%E5%AF%BC%E8%87%B4%E8%84%9A%E6%9C%AC%E4%BB%A5%201%20%E9%80%80%E5%87%BA%EF%BC%9F.png)
来自 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
(另请注意添加的引用)