''
Bash では、一重引用符 ( ) と二重引用符 ( )の違いは何ですか""
?
ベストアンサー1
一重引用符では何も補間されませんが、二重引用符では補間されます。たとえば、変数、バックティック、特定の\
エスケープなどです。
例:
$ echo "$(echo "upg")"
upg
$ echo '$(echo "upg")'
$(echo "upg")
Bash マニュアルには次のように書かれています:
文字を一重引用符 (
'
) で囲むと、引用符内の各文字のリテラル値が保持されます。一重引用符は、その前にバックスラッシュがあっても、一重引用符の間に出現することはできません。文字を二重引用符( )で囲むと、 、、、 (履歴展開が有効になっている場合)
"
を除くすべての文字のリテラル値が保持されます。 および の文字は二重引用符内でも特別な意味を持ちます( を参照) 。$
`
\
!
$
`
シェル拡張) 。バックスラッシュは、$
、`
、"
、\
、または改行のいずれかの文字が後に続く場合にのみ、特別な意味を持ちます。二重引用符内では、これらの文字のいずれかが後に続くバックスラッシュは削除されます。特別な意味を持たない文字の前のバックスラッシュは変更されません。二重引用符は、その前にバックスラッシュを置くことで、二重引用符内で引用できます。有効にすると、!
二重引用符内の がバックスラッシュを使用してエスケープされない限り、履歴展開が実行されます。 の前のバックスラッシュ!
は削除されません。特殊パラメータ
*
と@
二重引用符で囲むと特別な意味を持ちます(シェルパラメータの拡張)。