LoginSignup
1
1

More than 5 years have passed since last update.

文字列のダブルクォーテーションの扱いに関して

Posted at

パースエラー

以下のコマンドのエラーの原因を考えてみましょう

ruby -e " 100.times{|n| puts "a" } "

シンタックスハイライトを見ればわかる通り、aの部分をも文字列として扱いたいのに途中でダブルクォーテーションが使われているため、以下のようなエラーが表示されます。(ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]を使用しました。)

-e:1:in `block in <main>': undefined local variable or method `a' for main:Object (NameError)
    from -e:1:in `times'
    from -e:1:in `<main>'

おもな回避方法は2つあります。

シングルクォーテーションに置き換える

以下の二つのコードはエラーが出ずにきちんと表示されます。

ruby -e '100.times.do{|n| puts "a"}'
ruby -e "100.times.do{|n| puts 'a'}"

上のコードははじめと終わり、下のコードは2番目と3番目をシングルクォーテーションに置き換えました。もし、はじめのダブルクォーテーションだけを置き換えたら何が起こるでしょうか?

ruby -e '100.times{|n| puts "a"}"

文字列のはじめを表すシングルクォーテーションしかないため、エンターを押してもコマンドが終わってないものだと認識され、入力の続きを求められます。
こういう場合はCtrl + D一回使って終わらせましょう。(押す回数は一回で大丈夫です)

エスケープシークエンスを使う。

ダブルクォーテーションを使った文字列の中でどうしても、ダブルクォーテーションを使いたいというときがあると思います。そういう時に使うのがエスケープシーケンスです。
使い方は文字列として扱いたいダブルクォーテーションの前にバッククォート(Windowsなら¥)を入れるだけです。

ruby -e "100.times{|n| puts \"a\"}"
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1