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
シェルオプションを設定してglobパターンの拡張に失敗しても、スクリプトはゼロ以外の終了状態で終了しません(そして、ファイル名をglobパターンと一致しても通常は$?
シェル変数は変更されません)。
いいえリテラル名を持つファイルが現在のディレクトリに存在しない限り、インストールは失敗し、終了nullglob
ステータス1で終了します。convert
*.jpg
*.png
これはスクリプトで実行された最後のコマンドなので、スクリプトはこの終了状態で終了します。
問題のあるスクリプトを更新した後:
これで、スクリプトはゼロ以外の終了状態で終了します。もしテストの結果、最後に処理されたイメージファイルのPDFファイルがあります[ ! -e ... ]
(この場合はスクリプトで実行された最後のコマンドです)。
不要な場合
[ ! -e "${basename}.pdf" ] && convert "$i" "${basename}.pdf" || true
(追加された引用符も参照してください)