1

while ループの反復中に、入力ファイル内のすべての空白を保持しようとしています。これが私が作業しているファイルです(file1):

a@ubuntu:~$ cat file1
01: a   b   c
02: d   e   f

ご覧のとおり、各行の文字の間にタブを配置しました。これらのタブを出力に残しておきたい。次のように while ループで IFS をクリアしようとしました。

while IFS= read -r p; do
    echo $p
done < <(cat file1)

IFS をクリアした後でも、結果は何らかの理由でタブを取り除きます (echo -e も試しました)。

a@ubuntu:~$ sudo bash a.sh
01: a b c
02: d e f

ただし、while ループの外側で IFS をクリアすると、完全に機能します。

IFS=''

while read -r p; do
    echo $p
done < <(cat file1)

出力は次のとおりです。タブは保持されます。

a@ubuntu:~$ sudo bash a.sh
01: a   b   c
02: d   e   f

while ループと同じ行で IFS をクリアすると、タブが保持されないのはなぜですか?

4

1 に答える 1

4

変数を引用するだけです:

while IFS= read -r p; do     
  echo "$p"; 
done < file1

cat同様に使用する必要がないことに注意してください。

于 2013-07-17T03:39:35.763 に答える