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


18

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

文字を二重引用符( '"')で囲むと、引用符内のすべての文字のリテラル値が保持されますが、例外は '$'、 '`'、 '\'、および履歴展開が有効な場合は '!'です。

現時点では、単一引用符(')に関心があります。

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

文字を一重引用符(')で囲むと、引用符内の各文字のリテラル値が保持されます。バックスラッシュが先行する場合でも、単一引用符は単一引用符の間に出現しない場合があります。

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

 echo "'$a'"

変数がここでa定義されていない(従って$a= NULL文字列)は、印刷すべきである$aように、画面上に''シールドであろう、それは特別な意味内部だ有する、$特別な解釈から。代わりに、印刷し''ます。なぜそうなのか?

回答:


21

例の'単一引用符echoは、二重引用符(")で囲まれているため、リテラル値を取得します(そしてその意味を失います)。囲み文字は二重引用符です。

できることは、単一引用符を個別に印刷することです。

echo "'"'$a'"'"

または$

echo "'\$a'"

ああ、あなたは完全に正しいです!出力はあなたの答えと一致していますが、疑わしいのは「二重引用符で文字を囲む( '"')が引用符内のすべての文字のリテラル値を保持するということでした’, ‘\’, and, when history expansion is enabled, ‘!’." in the manual. But now reading it again I realized the second character is not single quote, ("'") but tilde ("。あなたの迅速な対応に感謝メートル、ありがとうございます。!
Lavya

2
マニュアルで言及されている2番目の文字は、チルダではなくバックティックです。
ケニーエビット

6

あなたはドキュメントを誤解しています:

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

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


あなたが正しいです。私は文書を誤解しただけでなく、それを読み間違えました(「 '」を「 `」に!)。あなたは「二重引用符内の単一引用符はリテラル文字です」について正しいです。ありがとう!
Lavya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.