表示された for ループの外観の変更

表示された for ループの外観の変更

次のコードがあります。

#!/bin/bash

FSTAB=` grep -vE "^#|swap|UUID" /etc/fstab  | awk '{print $1,$2,$3}'`

for i in $FSTAB
do

   echo "$i"

done

次を返します。

/dev/mapper/centos-root
/
xfs
/dev/sdb2
/hdos
xfs

問題は、後で比較したいので、改行を使用して返し、ジャンプせずに1行で返したいということです。

/dev/mapper/centos-root / xfs
/dev/sdb2 /hdos xfs

ベストアンサー1

変数をどのように入力しても、FSTABループ内の引用符なしの変数拡張は、forさまざまな種類のスペース間の区別を排除します。 (望むより:いつ二重引用符が必要ですか?そしてスペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?)

この問題を解決するには、改行のみに分割するように設定するか、IFSループを使用して行を繰り返すことができますwhile read

$ fstab=$(grep /etc/fstab ...)
$ while IFS= read -r line; do 
    printf "$line\n"
  done <<< "$fstab"

while read -r dev mnt fs; do ...これは、フィールドを別の変数に入れたい場合にも機能します。

おすすめ記事