17

一重引用符を使用する場合、アポストロフィ(「しない」)を含む単語はエスケープするのが面倒です。

'Don'"'"'t do that'

二重引用符を使用すると、ドル記号と感嘆符がつまずきます。

"It cost like \$1000\!"

私が使用できる別の種類の引用はありますか?

編集:この文字列を変数に格納するのではなく、コマンドライン引数として直接渡したいことも追加する必要があります。この目的のために、DigitalRossのソリューションを使用して試してみました。

$ echo "$(cat << \EOF 
Don't $worry be "happy".
EOF)"

しかし、取得します

dquote cmdsubst> 

Enterキーを押した後:/。したがって、この時点で、ZyXの提案がsetopt rcquotes最も便利であるように見えます。

4

4 に答える 4

22

zshを使用すると、

setopt rcquotes

。次に、ASCIIアポストロフィは次のようにエスケープされます。

echo 'Don''t'

。または、UTFアポストロフィを入力できるようにキーマップを設定すると、シェル内のあらゆる種類の引用符(なしを含む)に問題はありません。

echo 'Don’t'

。3番目はzshとbashの両方で機能します。

echo $'Don\'t'

1番目も3番目も引用符を単一の文字に絞り込むことはできませんが、長さのない文字列の場合は、上記のヒアドキュメントよりも冗長性が低くなります。'Don't'zshを使用すると、のような構成を置き換えるカスタムのaccept-lineウィジェットを使用してこれを行うことができます'Don'\''t'。私がperlでしか書くことができないかなりトリッキーな正規表現の魔法が必要です。考えられるすべてのケースをカバーできるふりをすることはできないので、おそらく最善のアイデアではありません。いかなる場合でも、スクリプトには触れません。

于 2012-10-14T19:10:13.150 に答える
4

ZsoltBotykaiの方向性が好きです。これは、任意のPosixシェルで機能する例です。(また、SOサーバーへの貼り付け後も存続することを確認しました。)

$ read -r x << \EOF
Don't $worry be "happy".
EOF
$ echo $x
Don't $worry be "happy".

これを機能させるもの;

  • -r魔法では\ない
  • \EOFただ魔法でEOF$ないのではなく
于 2012-10-14T18:19:56.780 に答える
3

引用符で囲まれたテキストを変数に割り当てたい場合でも、次のようにヒアドキュメントを使用できます(複数行のテキストにすることもできます)。

read -r -d '' VAR <<'ENDOFVAR'
This "will be" a 'really well' escaped text. Or won't.
ENDOFVAR
于 2012-10-14T18:06:04.737 に答える
1

Bash構文$'string'は、ANSI Cのようなエスケープシーケンスを可能にし、単一引用符で囲まれたバージョンに拡張できる別の引用符メカニズムです。

$> echo $'Don\'t $worry be "happy".'
Don't $worry be "happy".

詳細については、 https://stackoverflow.com/a/16605140/149221を参照してください。

于 2018-04-28T12:50:17.277 に答える