読者です 読者をやめる 読者になる 読者になる

argius note

プログラミング関連

開発しています



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

Unix-like

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$