84
84
キャリッジリターンなしで$something >> file.txtをエコーするには?
echo $something >> file.txt
をすると改行が追加されてしまいます。
改行せずに追記したい場合は?
echo $something >> file.txt
をすると改行が追加されてしまいます。
改行せずに追記したい場合は?
echo -n
はそのためのものです。
printf
は非常に柔軟で、echo
よりも移植性が高いです。C/Perl/etc の実装と同様に、フォーマット文字列を \n
で終了させなければ、改行は表示されません:
printf "%s" "$something" >> file.txt
コマンドの出力を使用している場合は、echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
```と組み合わせてxargsを使用することができます。
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
でテスト済み。