ターミナルでファイルを実行したら謎の%が出力されて悩んだ話

なかなか原因に辿り着けなかった%出力されちゃう問題

こんにちは、まいむです。

先日、ものすごく悩んで原因になかなか辿り着けない問題がありました。

それは、Rubyのプログラムが書かれたファイルをターミナルで実行した際に末尾に謎の % が出力されてしまうというもの。

# sample.rb
print "Hello World!!"
// ターミナルでの実行結果
$ ruby sample.rb
Hello World!!%

ファイルには書いていない、謎の % が出てしまう・・・

ここに載せたサンプルは簡略的に書いていますが、この末尾問題に遭遇した時はもっと色々と処理が書かれていたため、自分の書いたRubyのプログラム起因かを疑いました(半分はそうだったw)

ただ、なかなか答えに辿り着けず、フィヨルドブートキャンプのメンターーさんに質問した結果、zshの仕様であることが分かりました。

サンプルで使用している Kernel#print は末尾に改行を付加しないため、zsh側が自動で改行をしてくれるよう。 その際に改行をした印として % が出力されるという結果でした。

試しに末尾に改行が付加される Kernel#pKernel#puts で実行すると %は出なくなりました。

# sample.rb
puts "Hello World!!"
p "Nice to meet you!"
// ターミナルでの実行結果
$ ruby sample.rb
Hello World!!
"Nice to meet you!"

zsh側で% を出ないようにもできるようですが、改行がされていないことに気がつく助けにもなるため、zsh側で非表示にはしない方が良いという点も学びました。

私は原因がzshと気づかず、ドツボにハマった為、同じくこの % は一体?ってなった方がいたら、このブログが参考になれば幸いです。

それでは、また〜!