echo $something >> file.txt
にすると、ファイルに新しい行が追加されます。
改行せずに追加したい場合はどうすればよいですか。
それがecho -n
の目的です。
printf
はecho
よりも非常に柔軟で移植性があります。 C/Perlなどの実装と同様に、フォーマット文字列を\n
で終了しないと、改行は表示されません。
printf "%s" "$something" >> file.txt
コマンドの出力を使用している場合は、xargsをechoと組み合わせて使用できます。
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
は別の選択肢です。
入力としてecho
を使用している場合は、どのtr -d '\n'
からでも抜け出すことができます。
このテクニックは、他のコマンドからの出力をパイプラインするときにも有効です(単一行の出力で)。さらに、ファイルにUNIXまたはDOSの行末があるかどうかわからない場合は、tr -d '\n\r'
を使用できます。
これが動作することを示すいくつかのテストがあります。
改行が含まれています。
something='0123456789' ; echo ${something} | wc -c
11
UNIX改行:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
DOSスタイル
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
BSDのtr
とGNU tr
でテスト済み。