私がどうする適切に逆順で繰り返しますか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