回答:
単一引用符では、エスケープすることはできません。単一引用符を単一引用符に含める方法はありません。man bashでの引用を参照してください。
echo '\''
echo $'\'hello world\''
エスケープされたアポストロフィで何が起こっているかを説明するために、2番目の例を調べます(一重引用符、または強力な引用符も参照してください)。
$ echo '\'Hello World\''
> # expects you to continue input
ここで、あなたが述べたように、引用をぶら下げたままにしました。次に、端を切り取り、次のように変更します。
v v v
$ echo '\'Hello World # Echo two strings: '\' and 'Hello World'.
\Hello World ^
「Hello World」の部分文字列はここでは引用されていませんが、強い引用符で囲まれているように動作しました。もう一度例を使用して、今回は別の方法でエンドをトリムします。
vv v (plain apostrophe)
$ echo '\'Hello World\' # Will echo: '\' and 'Hello World''
\Hello World' ^^ # Note that the trailing ' char is backslash escaped.
「Hello World」の部分文字列は、最後に追加されたアポストロフィ(エスケープされたため、単一引用符ではない)のみを使用して、強い引用符で囲まれているように動作します。
別の単一引用符が最後に追加されると(元の例)、文字列はぶら下げられたままになり、閉じ引用符を待機します。
シェルで引用符をエスケープする簡単な例:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
既に開いているもの('
)を閉じ、エスケープしたもの(\'
)を配置して印刷し、もう1つ('
)を開きます。
代わりに:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
既に開いているもの('
)を終了し、別の引用符("'"
)に引用符を配置してから、別の引用符()を開き'
ます。
あなたがしたこと('\'Hello World\''
)は:
'
。\'
られるため、文字列は次のようになります'\'
。Hello World
引用符ではありません。\'
)を開かずに配置しました。'
)は開始文字列ですが、予想される終了文字はありません。したがって、正しい例は次のとおりです。
$ echo \'Hello World\'
'Hello World'
echo \''Hello World'\'