ファイル名globで空にできる配列を作成するには?

ファイル名globで空にできる配列を作成するには?

それzshを作るのは難しいことではありません。空にすることができます(空かもしれない)ファイル名globの結果配列。たとえば、

% pathlist=( /no/such/path/*(N) ); printf -- "%d\n" $#pathlist
0

bashしかし、上記のコードについて私が考えることができる最も近い近似は、globがnullのときに空の配列を生成しません。

% pathlist=( /no/such/path/*    ); printf -- "%d\n" ${#pathlist[@]} )
1

この場合、pathlist変数には「/no/such/path/*」文字列という単一のエントリが含まれます。

bash各ファイルにpathlist1つの項目(もしそうなら) 世界的に一致していますか?

答え1

シェルオプションを使用する必要がありますnullglob

#!/bin/bash
shopt -s nullglob
pathlist=( /no/such/path/*    ); printf -- "%d\n" "${#pathlist[@]}" )
shopt -u nullglob

Bashのマニュアルでは、シェルオプションについて次のように説明しますnullglob

設定されている場合、Bash はファイルと一致しないファイル名パターンを、自分ではなく空の文字列に拡張できるようにします。

関連情報