forループをどのように反転しますか?

forループをどのように反転しますか?

私がどうする適切に逆順で繰り返しますかfor

for f in /var/logs/foo*.log; do
    bar "$f"
done

ファイル名の奇妙な文字を損なわない解決策が必要です。

ベストアンサー1

Bashまたはkshでは、ファイル名を配列に入れ、逆の順序で配列を繰り返します。

files=(/var/logs/foo*.log)
for ((i=${#files[@]}-1; i>=0; i--)); do
  bar "${files[$i]}"
done

このオプションを設定すると、上記のコードはzsh ksh_arrays(kshエミュレーションモード)でも実行されます。 zshには、glob修飾子を介して一致順序を変更するより簡単な方法があります。

for f in /var/logs/foo*.log(On); do bar $f; done

POSIXには配列が含まれていないため、移植性が必要な場合は、文字列配列を直接格納する唯一のオプションは位置引数です。

set -- /var/logs/foo*.log
i=$#
while [ $i -gt 0 ]; do
  eval "f=\${$i}"
  bar "$f"
  i=$((i-1))
done

おすすめ記事