bashは変数から先行スペースを削除しています。

bashは変数から先行スペースを削除しています。

私はbashを初めて使用します(これまではkshのみを使用しました)。変数の空白の問題で苦労しています。私はbashの前の空白の処理に関する多くの記事を読んでいますが、私の例ではこれを修正する方法がわかりません。

echo "No space"         > x.tmp
echo "     Some space" >> x.tmp
cat x.tmp
cat x.tmp | while read line
do
   echo "$line" >> y.tmp
done
cat y.tmp

出力:

No space
     Some space
No space
Some space

スペースを保存するにはどうすればよいですか?

ありがとうございます。

答え1

あなたはする必要があります

while IFS= read -r line

IFS を空の文字列に設定すると、空白が保持されます。
を使用すると、-rテキストのバックスラッシュシーケンスが保持されます。


パフォーマンスが問題の場合、while readループは次のようになります。非常にバッシュが遅い。入力を行に保存し、メモリ消費が問題にならない場合は、入力を行配列に読み込みます。

mapfile -t lines < x.tmp
for line in "${lines[@]}"; do
    do_something_with "$line"
done

関連情報