次のコードがあります。
#!/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 ...
これは、フィールドを別の変数に入れたい場合にも機能します。