私は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