グローバルスキーマを拡張する最良の方法は何ですか?

グローバルスキーマを拡張する最良の方法は何ですか?

../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

または一緒zshyash

set -o nullglob

zshnullglob元のソース)グローバル設定を変更したくない場合は、glob修飾子を使用することをお勧めします(N)

list( ../smth*/(N) )

ksh93に対応:

list=( ~(N)../smth*/ )

おすすめ記事