セクション3.1.2.3の「二重引用符」では、Bashのマニュアルで次のように述べています。
文字を二重引用符( ‘"’)で囲むと、 ‘$’、 ‘`’、 ‘\’、および履歴拡張が有効になっている場合は ‘!’を除いて、引用符内のすべての文字のリテラル値が保持されます。
現在、私は単一引用符('
)。
これは前のセクションで説明した特別な意味であり、セクション3.1.2.2は次のとおりです。
文字を単一引用符で囲みます(
'
)は、引用符内の各文字のリテラル値を保持します。バックスラッシュが前に付いている場合でも、単一引用符の間で単一引用符が発生しない場合があります。
2つの博覧会を組み合わせて、
echo "'$a'"
変数a
は定義されていません(したがって$a
= null文字列)、印刷する必要があります$a
画面上、''
、それが特別な意味を持つと、$
特別な解釈から。代わりに、''
。なんでそうなの?
echo
の例の'
一重引用符文字は、二重引用符("
)で囲まれているため、リテラル値になります(意味が失われます)。囲み文字は二重引用符です。
あなたができることは、単一引用符を別々に印刷することです:
echo "'"'$a'"'"
または$
をエスケープします:
echo "'\$a'"
ドキュメントを誤解している:
内部に特別な意味があると、特別な解釈から$を保護します
「特別な意味を持つ」とは、文字どおりに解釈されないisことを意味します。単一引用符は、$
が展開されないようにします。ただし、二重引用符内の単一引用符はリテラル文字です。つまり、何も影響を受けません。出力$a
が必要な場合は、echo '$a'
が必要です。