argius note

プログラミング関連

echoで改行したくない時はprintf

MaxOSX(10.6)で、改行なしでechoさせようと思い、-nオプションをつけてやってみると、

$ echo -n "hello"
-n hello
$ echo "hello\c"
hello$

となります。manには「-nオプション」と書いてあるんですけど...
(この件は、ちょっと勘違いがありましたので、末尾に追記しました。)


これについて調べていたら、「改行で悩みたくなければprintfを使えば?」と書いてありました。

printfって互換性に問題があるかと思っていたので、避けていたんですよね。今よりUnix-like関連に拙いときに発生した思い込みがそのまま残ってしまったような感じです。


調べてみたら、下記の環境では使えました。


追記:id:teramakoさんよりコメントいただきました。
ビルトインコマンドと外部コマンドが両方入っているというのは盲点でした...printfのほうはビルトインなのかなと思って、ぜんぶwhich打って調べたんですけど、片手落ちでした。
MacOSXでの話は、スクリプト内で echo -n としたときに起きていたのを忘れていました。
なので、こういうことになります。

$ which echo
/bin/echo      
$ echo -n abc
abc$ /bin/echo -n abc
abc$ sh -c "echo -n abc"
-n abc
$ sh -c "/bin/echo -n abc"
abc$