Bash のパターン置換パラメーター展開を使用して、ループ変数を設定できます。例:
MANPATH=/usr/lib:/usr/sfw/lib:/usr/info
# Replace colons with spaces to create list.
for path in ${MANPATH//:/ }; do
echo "$path"
done
注:置換展開を引用符で囲まないでください。 MANPATH からの展開された値を、単一の文字列としてではなく、for ループによって個別の単語として解釈する必要があります。
内部フィールド区切り記号を設定できます:
( IFS=:
for p in $MANPATH; do
echo "$p"
done
)
サブシェルを使用したため、IFS の変更が現在のシェルに反映されません。
Bash でこれを行う標準的な方法は、read
を使用することです。 適切に組み込み:
IFS=: read -r -d '' -a path_array < <(printf '%s:\0' "$MANPATH")
これが唯一の堅牢な解決策です:まさにあなたが望むことを行います:文字列を区切り文字 :
で分割します スペース、改行、および *
のようなグロブ文字に関しては安全です 、 [ ]
など (他の回答とは異なり:それらはすべて壊れています)。
このコマンドの後、配列 path_array
が得られます 、ループできます:
for p in "${path_array[@]}"; do
printf '%s\n' "$p"
done