【Ruby】\(バックスラッシュ)の出力でハマった

スポンサーリンク

原因

結論は出力コマンドが文字列出力かオブジェクト出力かの違いですw

ハマった理由(経緯)

RubyからLinuxのrmコマンドを動的に作成して削除する処理がありました。

開発環境でも想定外のファイルを削除したら困るので、実行前にコマンドを出力して確認がしたかったのです。

apコマンド(Awesome Print)を使って、作成したコマンドを確認したところ\(バックスラッシュ)が出力されていませんでした。

調べてみると「\」を出力したい場合は「\\」とする必要があるので従ったところ以下のように出力されました。

a = "a"
b = "\\;"
c = "\;"

ap a + b ⇒ "a\\;"←「\」1つだけ出力したい
ap a + c ⇒ "a;" ← 出力されない

仕様通りに書いても「\」が出力されない。。。

ap関数の意味を考えずに「Rubyのバグ?バージョンの問題?」など自分のミスを疑わないのが僕の悪い所です。

解決方法

オブジェクト出力である、「apコマンド」で出力していたのが悪かったです。

※「pコマンド」もオブジェクト出力です。

「puts」や「put」で出力していれば問題ありませんでした。

今回の目的は実行コマンドの確認なので、出力コマンドはなんでもいいのです。

a = "a"
b = "\\;"
c = "\;"

puts a + b ⇒ a\; ←想定通り
puts a + c ⇒ a; ←想定通り

今回の教訓

コピーしてきたコマンドの意味を予想して使わない。ちゃんと関数の意味を理解して使う。

初歩的なことに1時間取られましたので、やはり調べることはすごく大事なのです。

「調べるの5分、ハマると1時間」反省しますw

 

タイトルとURLをコピーしました