zsh の echo と bash の echo

まぁ、ご存じの方も多いと思うけど挙動が異なるので、注意。はまりました。

 の  コマンドはエスケープコントロールを出力できません。例えば、

echo -n "This is a Pen.¥¥rThat" ; echo

この出力は、 bash と  で異なります。もっとも echo は組み込みコマンドとしている場合も多いので、正常に動作する場合もあるかと思います。少なくとも私の環境では、 bash と zsh で動作が異なりました。

¥¥ r の部分が、「復帰」です。 echo の先頭にある -n は明示しない限り開業を行わないオプションです。最後の echo は改行のみを行います。私の意図している表示は、”This is a Pen.”を出力して後、先頭に戻って ( 復帰 )”That”を出力するというものです。その後に改行が行われますね。”This”の部分は”That”に上書きされて見えなくなります。つまり、”That is a Pen.”と出力されるはずなんですね。 bash だと「復帰」が動作しませんでした。

zsh では組み込みコマンドとなっているようですね。シェルスクリプトで zsh を明示しないで使ったら、「復帰」が機能せず悩んでしまいました。私が通常使っているのは zsh なので、シェルスクリプトでも明示すればよかったんですね。ついつい、 #!/bin/bash とか書いていました。 zsh をはっきり宣言してやれば、 zsh 組み込みの echo を使ってくれますので、こちらが意図したとおりの動作がきちんと行われます。

スクリプトからシェルを呼び出したりする場合にも、自分が普段使っている環境を明示してやることが必要ですね。そうじゃないと、私みたいにはまります。


知ったらしまい

相場格言

投稿者プロフィール

會澤 賢一
新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください