../smth*/*
プログラムでは、グローバルパターン(たとえば、または/etc/cron*/
)をファイルリストに展開する必要があります。最良のアプローチは何ですか?
ベストアンサー1
配列宣言の右側に展開するようにしてください。
list=(../smth*/) # grab the list
echo "${#list[@]}" # print array length
echo "${list[@]}" # print array elements
for file in "${list[@]}"; do echo "$file"; done # loop over the array
nullglob
シェルオプションを設定する必要があります。
デフォルトでは設定されません。zsh
エラーが発生したり(またはからbash -O failglob
)文字通りに渡されるのではなく(他のすべてのBourne様シェル)、一致しないglobはnullに拡張されます。
bash
に設定する
shopt -s nullglob
または一緒zsh
にyash
set -o nullglob
zsh
(nullglob
元のソース)グローバル設定を変更したくない場合は、glob修飾子を使用することをお勧めします(N)
。
list( ../smth*/(N) )
ksh93に対応:
list=( ~(N)../smth*/ )