「と」の違いは何で、いつ使用しますか? [複製]

「と」の違いは何で、いつ使用しますか? [複製]

私は引用した文字列を入力することに慣れていましたが、今後設定ファイルと提案を検索するときにアポストロフィが使用されていることがわかります。

私はしばしばアポストロフィの内容を設定ファイルにコピーし、コードが一致するように引用符で置き換えます。

しかし、それらの違いは何ですか? (私は主にbashを目指しています。他のLinuxベースのスクリプトが異なる動作をしている場合はボーナスです。)

たとえば、

echo "Hello World!"そしてecho 'Hello World!'

これらのいずれかを使用すると(フォーマットされた)変数を使用できない可能性があります。これは私と関係がありますか、それとも個人的な好みですか?

答え1

一重引用符と二重引用符の間には違いがありますが、スタイルの問題ではありません。一重引用符は実際にあなたが書いた内容を反映しているので、あなたが書いた内容が印刷されると確信できます。一方、二重引用符は変数値を挿入します。

からman bash

文字を一重引用符で囲むと、引用符内の各文字のリテラル値が保持されます。前にバックスラッシュがある場合でも、一重引用符の間に一重引用符を使用することはできません。

文字を二重引用符で囲むと、履歴拡張が有効になっている場合は、$、バックティック、\、!を除く引用符内のすべての文字のリテラル値が保持されます。 $とバックティック文字は二重引用符内で特別な意味を維持します。バックスラッシュは、後に$、 `、 "、\、または改行文字のいずれかが続くときにのみ特別な意味を保持します。二重引用符の前にバックスラッシュを付けて二重引用符の中に入れることができます。エスケープにバックスラッシュを使用しない限り、この場合は前のバックスラッシュは削除されません。

したがって、あなたの例では次のようになります。

#!/bin/bash
PLACE="World"
echo "Hello $PLACE !"
echo 'Hello $PLACE !'

次の出力が生成されます。

Hello World !
Hello $PLACE !

答え2

https://www.gnu.org/software/bash/manual/bashref.html#引用

二重引用符内の変数は拡張されます。

一重引用符は文字列の補間を防ぎます。

文字を一重引用符で囲むと、引用符内の各文字のリテラル値が保持されます。前にバックスラッシュがある場合でも、一重引用符の間に一重引用符を使用することはできません。

$'…'ANSI Cエスケープシーケンスを使用できるシンボルもあります。

答え3

言語によって異なります。あなたはbashに言及し、他の答えはそれに焦点を当てていますが、質問をした方法はここに一般的な規則があると思うことを示唆しています。いいえ。

たとえば、ランダムに発生する言語を考えてみましょう。

  • 文字列内の変数は拡張されますが、拡張されませbashん。神はcshが何をしたのか知っています。sh"..."'...'
  • Pythonでは、これら2つが同じで、好みや利便性に応じて、どちらかを選択できます。
  • Cに似た言語では、文字列、"..."単一'x'文字、'abc'構文エラーです。
  • Lispの後に続くすべての項目を「参照」"..."する文字列。'
  • 構成ファイル内の「正しい」引用符は「...」であるか、構成されたプログラムの作成者が良い考えだと思うもの'...'です"..."[...]|...|
  • Postscriptでは文字列が で表示されます(...)
  • (やや古代の)Fortranでは、5文字の文字列「hello」を次のように書くことができます5Hhello(つまり、引用符のような文字列の表示がない例です)。
  • 英語で彼らは巣を作る「私はその人に挨拶しました」または「私はその人に「こんにちは」と言いました。」編集者が大西洋のどちらに住んでいるかによって異なります。
  • 時間が経つと、もっと神秘的な例を思い出すことができると確信しています。

彼ら、ただPythonは好みやスタイルの問題です。引用符は別の言語構文です。

関連情報