bashでは、これを行うと:
mkdir /tmp/empty
array=(/tmp/empty/*)
必要に応じてゼロではなくarray
、1つの要素が含まれていることがわかります。"/tmp/empty/*"
ありがたいことに、これは、を使用してnullglobシェルオプションをオンにすることで回避できます。shopt -s nullglob
ただし、nullglobはグローバルであり、既存のシェルスクリプトを編集すると、問題が発生する可能性があります(たとえば、誰かがの終了コードls foo*
をチェックして、「foo」で始まる名前のファイルがあるかどうかを確認しましたか?)。したがって、理想的には、小さなスコープ、理想的には1つのファイル名拡張に対してのみオンにします。を使用して再びオフにすることができますがshopt -u nullglob
、もちろん、以前に無効にされた場合に限ります。
old_nullglob=$(shopt -p | grep 'nullglob$')
shopt -s nullglob
array=(/tmp/empty/*)
eval "$old_nullglob"
unset -v old_nullglob
もっと良い方法があるに違いないと思います。もちろん、変数の代入はサブシェルで終了するため、明らかな「サブシェルに入れる」は機能しません。オースティングループがksh93構文をインポートするのを待つ以外にありますか?