それ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
各ファイルにpathlist
1つの項目(もしそうなら) 世界的に一致していますか?
答え1
シェルオプションを使用する必要がありますnullglob
#!/bin/bash
shopt -s nullglob
pathlist=( /no/such/path/* ); printf -- "%d\n" "${#pathlist[@]}" )
shopt -u nullglob
Bashのマニュアルでは、シェルオプションについて次のように説明しますnullglob
。
設定されている場合、Bash はファイルと一致しないファイル名パターンを、自分ではなく空の文字列に拡張できるようにします。