web-dev-qa-db-ja.com

二重引用符内の単一引用符とBashリファレンスマニュアル

セクション3.1.2.3の「二重引用符」では、Bashのマニュアルで次のように述べています。

文字を二重引用符( ‘"’)で囲むと、 ‘$’、 ‘`’、 ‘\’、および履歴拡張が有効になっている場合は ‘!’を除いて、引用符内のすべての文字のリテラル値が保持されます。

現在、私は単一引用符(')。

これは前のセクションで説明した特別な意味であり、セクション3.1.2.2は次のとおりです。

文字を単一引用符で囲みます(')は、引用符内の各文字のリテラル値を保持します。バックスラッシュが前に付いている場合でも、単一引用符の間で単一引用符が発生しない場合があります。

2つの博覧会を組み合わせて、

 echo "'$a'"

変数aは定義されていません(したがって$a = null文字列)、印刷する必要があります$a画面上、''、それが特別な意味を持つと、$特別な解釈から。代わりに、''。なんでそうなの?

19
Lavya

echoの例の'一重引用符文字は、二重引用符(")で囲まれているため、リテラル値になります(意味が失われます)。囲み文字は二重引用符です。

あなたができることは、単一引用符を別々に印刷することです:

echo "'"'$a'"'"

または$をエスケープします:

echo "'\$a'"
23
Anthon

ドキュメントを誤解している:

内部に特別な意味があると、特別な解釈から$を保護します

「特別な意味を持つ」とは、文字どおりに解釈されないisことを意味します。単一引用符は、$が展開されないようにします。ただし、二重引用符内の単一引用符はリテラル文字です。つまり、何も影響を受けません。出力$aが必要な場合は、echo '$a'が必要です。

6
Hauke Laging