シェルスクリプトでスペースが改行として計算されるのはなぜですか? [コピー]

シェルスクリプトでスペースが改行として計算されるのはなぜですか? [コピー]

私は次のスクリプトを書いた。ファイルを読み込み、1行ずつ印刷したいのですが、空白を新しい行として扱います。なぜそんなことですか?

#!/bin/bash
for i in `cat data.txt`
do
echo $i
done

入力:ファイル名で保存データ.txt

B  FM_Server10_grp GPCBIOEMM10          Y          N               ONLINE

出力:

B
FM_Server10_grp
PCBIOEMM10
Y
N
ONLINE

10もう一つの質問:fromなどの数値のみを抽出する方法はGPCBIOEMM10

ベストアンサー1

for i in ...デフォルトでは、改行で区切られたトークンのリストではなく、スペースで区切られたトークンのリストが繰り返されます。空白と改行文字の両方が空白文字であるため、区切り文字と見なされます。

考慮する:

while read line; do
    echo $line
done < data.txt

デフォルトでは、read は改行文字まで読み込み、読み取った内容を指定された変数に格納します。

おすすめ記事