• 締切済み

スクリプト言語で文字列を囲む "" '' の厳密な使い分け?

スクリプト言語、Perl, PHP, Pythonでよく a = "文字列" b = '文字列' のように、ダブルとシングルが使われますが、 サンプル等は''シングルが多いですが、私は元々VBをよく使っていたので、""の方が馴染みます。 ''との違いは""は中で変数が展開されることだと思いますが それ以外で使い分ける厳密な理由はありますか?

  • sdst
  • お礼率0% (0/27)
  • PHP
  • 回答数7
  • ありがとう数25

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.7

>#6 私もツッコミをば スクリプト言語とインタープリタをごっちゃにしていませんか? 逐次実行って言葉がインタープリタ方式と勘違いしてるな、思わせるって事ですが。 スクリプト言語ってのはかなり広範な意味があるようですし、狭義にもインタープリタ方式限定ではないようです。 http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E8%A8%80%E8%AA%9E

  • hiroshi_y
  • ベストアンサー率100% (1/1)
回答No.6

5> 気になったのでツッコミ。 >実行の最初に行われるコンパイルがマシン語命令で数命令(ナノ秒単位)で遅いだけで スクリプト言語は、最初にコンパイルなど行われません。 PERLがスクリプト言語ではない、と言われる理由です。 PHP, Pythonは共にスクリプト言語です。 シングル、ダブルの比較ではありませんが、PHPで文字列の置換え結果の実験記事です。 http://www.objective-php.net/blog/detail/20100123 {}の有無で速度が劇的に変わる、というあたりが、毎回文字列を処理しているとする判断根拠となるでしょう。 逐次実行するのがスクリプト言語の特徴で、ループ内の文字列を毎回逐次実行する処理系は、スクリプト言語であれば別に間抜けではありません。 コンパイル言語とスクリプト言語の違いも知らず、その事でスクリプト言語の作者を間抜け呼ばわりするする方が、よっぽど間抜けです。

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.5

言語によって違うというのは他の方が書いている通り。とはいえ、" " の方が ' ' より機能が多いというケースが多いですが。 で、"ABC" と 'ABC' のようにどちらを使っても同じ場合に、どちらを使うのかは好みでしょう。 私は、両者が混在すると見にくいので、" " の機能を使うケースが多ければ、" " で統一する方が良いと思います。 実行速度の事を書いてる人もいますが、"ABC" と 'ABC' では、実行の最初に行われるコンパイルがマシン語命令で数命令(ナノ秒単位)で遅いだけで、コンパイル結果の構文木や中間コードの実行の際には全く同じでしょう。従って、深いループの内側に合った場合でも実行時間は同じはず。そうでなければ処理系を書いた人が間抜けすぎです。 シェルはループだと毎回ソースを読んでそうな気がするので、数億回のループの中なら"ABC"より'ABC'の方が1秒くらい速いかもしれません。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

言語によっても違います。 Perlやシェルスプリプトでは シングル: \や変数置換をほとんど行わない ダブル:\や変数置換を行う なのですが、 Pythonでは、両者に違いはありません。両方とも\の展開をします。 唯一、(エスケープなしに)シングルの中にはシングルを書けず、ダブルの中にはダブルを書けない点だけが違います。 \を展開しないような文字列は r''とかr""とrを付けます。 また同じ「展開しない」シングルでも Perlではシングルでも\'と\\だけは例外的に展開しますが シェルスクリプトでは一切の例外なく\は展開されません シングルが使われるのは、展開をせずに入力したままを使いたいときです。 例えば、Perlでは @も展開される対象ですから $a='a@b' のつもりで $a="a@b" とやると思った通りになりません。 あとは、文字列中にシングルクオートが使われるならダブルクォートで、逆ならシングルクオートで、という使いわけもあります。 さらに、言語によっては、そのどちらでもないクオートが用意されているものがあります。 例えば、Perlでは q(....) で '....'と、qq(....)で"...."と同じ意味になります。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

シングルでくくった場合、ダブルをエスケープしなくて良い、逆も同様。 なので、エスケープが面倒だという手抜き気分のときに、使う事はあります。 echo '<a href="hoge">ホゲホゲ</a>'; "SELECT * FROM t_table WHERE f_field='hoge'"; 勉強中に参照していたサイトで、推奨していたので悪いクセとして残ってしまった。 たぶん、私自身がVB出身ってこともあるでしょう(もしかすると、私が参照していたサイトの制作者も)。 使い分ける理由は、シングルは変数が展開されないので余分な処理を通らない、つまり、少し早い。※もしかするとメモリ使用量にも影響があるかも知れない。 『ループの中で何回も使われる場合に多少影響がある』程度の事で、『ウェブプログラムを0.1秒縮めたとしても体感どれほど変わる?』としか思えないぐらいの影響でしかないでしょうが。 『ダブルを使う必要がない個所では、使わない方がプログラムコードとして美しい、無駄に意味なく実行速度を遅くすることは美しくない。』 という、自己満足が最大の理由で私は使い分けてます。 ※なので、開発期間に余裕のないときのプログラムコードはダブルクォーテーションだらけです。 ま、必要不必要で使い分ける場合でも、以下のように混在させるのは美しくないので、どっちかに統一しますが。 query = 'SELECT * FROM t_table '; query .= "WHERE f_field='{$hoge}' ";

noname#111181
noname#111181
回答No.2

ダブルクォーテーションの中では、\nや\tといったエスケープ文字を展開してくれます。

回答No.1

>''との違いは""は中で変数が展開されることだと思いますが >それ以外で使い分ける厳密な理由はありますか? 認識はあっていますが・・・引用符の展開する規則がプログラム言語で違いがあるので要注意です ^ ^ なお、バック・クォート『`』はコマンドを実行した結果を展開してくれる機能を持つ言語もあります。

関連するQ&A

  • 各種スクリプト言語の記述時の文字コードについて

    掲題の通り、メジャーなLL言語についての文字コードについて質問です。 例えば PHPでコンソール用にちょっとしたものを書くとき #! /usr/local/php print("文字列"); 書いて、ターミナルで php ./sample.php などとすると問題なく「文字列」という文字が表示されます。 このとき、ファイルはUTF-8で書いたとします。 次に、別のLL言語pythonで下記の様に記述したとします。 #! /usr/local/python print ("python文字列"); 上記内容を python ./sample.py などと実行すると SyntaxError: Non-ASCII character '\xe6' in file と上記のようなエラーがでます。どうやらアスキーコードの範囲外のバイト数が含まれているようです。 これを #! /usr/local/python #coding: utf-8 print ("python文字列"); としてやると問題なく「python 文字列」と表示されると思います。 これはRubyでも同じだと思います。 また同じ様に #! /usr/bin/bash echo "文字列" とシェルスクリプトで上記の様にかいてやると・・・ 問題なく「文字列」と表記されます。 ではなぜシェルスクリプト(bash)やPHPはマジックコメントを記述しなくても 暗黙のうちにUTF-8で文字列が表記されて pythonやRubyは明示的にUTF-8とマジコメを記述しなければならないのでしょうか? ご教授ください。

    • ベストアンサー
    • PHP
  • スクリプト言語としてのPHPについて

    PHPについてほとんど知らない者です(他の言語もほとんど知りませんが・・・)。 Webで検索していると、Webアプリを開発するLL言語としてPHP, Ruby, Python, Perlを使っているというケースをよく目にします。一方、タスクを自動化するためのスクリプトを記述する言語としては、Ruby, Python, Perl, シェルスクリプトで記述しているケースをよく目にします(Linux/UNIX系)。 そして、PHPはWebアプリ開発言語としてかなりのシェアを占めていそうだが、スクリプト言語としてはそんなにシェアを占めていないのかな? という印象を持ちました。 そこでお聞きしたいのですが、スクリプト言語としてのPHPは他の言語と比較してどのような感じなのでしょうか? PHPはWebアプリ開発言語としてだけではなく、スクリプト言語しても開発現場でRuby, Perl同様に使われているといった感じなのでしょうか? あるいは、WebアプリはPHPで書いてるけど、スクリプトはPHP以外(Ruby, Pythonなど)で書いているという方は結構いるのでしょうか?その場合、何故PHPを使わずに別の言語を使っているのでしょうか? ご意見をお聞かせください。

    • ベストアンサー
    • PHP
  • シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2

    シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2...のような位置パラメタや、$?,$$,$!,$-のような特殊変数がありますが、これはPerlやRubyもあるようですが、意味や効果、やり方等は同じでしょうか。 当方はPHP,JavaScriptしか触れていませんし、PHPやJavaScriptは、そのような位置パラメタや特殊変数は見当たりませんでした…。 つまり、PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか。 こういった位置パラメタや特殊変数はPerlやRuby以外に他の言語にもありますでしょうか。PythonとかCとかJavaとか…。 また、Bシェルを学んでいる途中ですが、シェルスクリプトの中にはbourne以外にもbashやC Shell,zsh,Perlがありますが、何故Perlが入っているのでしょうか。 Perlをやっている方は別途シェルスクリプトをやる必要はないということでしょうか。

  • C言語で文字列操作を忘れてしまいました。

    長い間スクリプト言語ばかりやっておりまして、C言語に戻ると、文字列を返す 関数を作ろうとしましたが、お恥ずかしいながらできませんでした。 ローカル変数の値を戻り値に使おうとして、それがwarningになったり、動作が不安定になったりして、文字列を返す仕組みを完全に忘れてしまっていました。 例えば、"test"と言う文字列を返す関数を書きたいのですが、メモリ操作も考えた サンプルをだれか教えて欲しいです。 int main(void) { printf("%s", 「関数名」); }

  • スクリプトでnslookupのAレコード MXレコードを調べるようなこと

    スクリプト(perl,php,python,javascript,ruby,vb.net)など言語は問いませんが nslookupのAレコード MXレコードを調べるようなことしたいです。 できればpythonやjython,phpでの方法が知りたいです。 osはWindowsです。

    • ベストアンサー
    • Perl
  • c言語の文字、また文字列について

    c言語の文字、つまり「'(シングルクオーテーション)」で囲んだ単数の半角文字は、メモリに保存されているのでしょうか。 また、アドレスは有るのでしょうか。 c言語の文字列、つまり「"(ダブルクオーテーション)」で囲んだ複数の文字は、メモリに保存されているのでしょうか。 また、アドレスは有るのでしょうか。

  • Apple Script の文字列中に『”』を使う

    Apple Script の文字列のなかに、ダブルクオート「"」を含めるにはどうしたらよいのでしょうか? 例: set TEST_TEXT to ”文字列" の、文字列にダブルクオートを入れたいのです。

    • ベストアンサー
    • Mac
  • perlのシングルクォートとダブルクォートの置き換えについて

    perlのシングルクォートとダブルクォートの置き換えについて お世話になります。 現在、perlにて開発を行っているのですが、一つ問題に当たってしまいました。問題になっているのは、文字列を扱う部分です。perlにおいて文字列はシングルクォートに囲まれたものと、ダブルクォートに囲まれたものがあると思うのですが、この両者の違いは、内部に書かれた変数等を展開するか否かだったと思います。 実は開発の途中でこのシングルクォートで囲まれた文字列を、ダブルクォートに囲まれた文字列に変更しなければいけなくなりました。つまり $test = 'aaa';  を  $test = "aaa"; としたいのです。これってperlの仕様的に可能なのでしょうか? かなり悩んだのですが、どうしてもわかりませんでした。 ちなみに、なぜこの処理が必要なのかというと、HPの製作をしているのですが、設置したフォームからその内容を得るというプログラムを書いた際に、そのフォームの内容がシングルクォートでしか得られないからです。シングルだとそののちの処理に影響が出てしまうのです。 だれかご存じないでしょうか。よろしくおねがいします。

    • ベストアンサー
    • Perl
  • PHPスクリプトでperlスクリプト

    はじめまして。PHP初心者です。助け舟をお願いします。 PHPスクリプトで、formの表示からデータの受け取り→ファイルに書込み→終了画面の表示ができるスクリプトを書くことが出来ました。 これをphpスクリプト1とします。 POSTで受け取った変数を元に処理した変数を返すperlスクリプトがあります。 これをperlスクリプト1とします。 perlスクリプト1をphpスクリプトにすることは私には困難なため、phpスクリプト1のファイルに書き込む前に、perlスクリプト1を実行→返った変数をphpスクリプトで使用しファイルに書込み→終了画面の表示を行いたいです。 こんなことってできますか?

    • 締切済み
    • PHP
  • PHPの文字列をJavascriptの変数にする

    PHPの変数に格納された文字列を、直接Javascriptの変数の一部として格納しようと考えています。 例:) <script> var txt = "<?php echo $text; ?>"; </script> しかし、$textにダブルクォーテーションなどの文字が含まれていると、スクリプト全体が破綻します。今のところ、PHPの中で、問題を起こしそうな文字列を変換するように処理しています。 例:) $text = str_replace("\\", "\\\\", $text); $text = str_replace("\"", "\\\"", $text); $text = str_replace("\n", "\\n", $text); これよりもスマートな方法(たとえば用意されている関数を使うなど)がありますでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう