Bashの二重引用符の間に「!」シンボルの書き方は? [コピー]

Bashの二重引用符の間に「!」シンボルの書き方は? [コピー]

!二重引用符で囲まれた文字列にシンボルを入れるときにbashスクリプトにシンボルを書き込む方法がわかりません。

たとえば、

var="hello! my name is $name! bye!"

何か狂ったことが起こりました:

$ age=20
$ name='boda'
$ var="hello! my name is $name! bye!"

最後のコマンドでEnterキーを押すと、最後のコマンドなしでコマンドが繰り返されます(自己入力)!

$ var="hello! my name is $name! bye"

Enterをもう一度押すと

$ var="hello! my name is $name bye"

もう一度Enterを押すと消え、出力はありません。

$ 

私がこれをしようとすると:

$ echo "hello\! my name is $name\! bye\!"

すると、次のように出力されます。hello\! my name is boda\! bye\!

一重引用符を使用すると、私の名前は拡張されません。

$ echo 'hello! my name is $name! bye!'

出力は次のとおりですhello! my name is $name! bye!

私はこれを働いています:

$ echo "hello"'!'" my name is $name"'!'" bye"'!'

しかし、理解/編集/維持/更新はめちゃくちゃ"で不可能です。'

誰でも助けることができますか?

ベストアンサー1

見つかったように、!一重引用符内の履歴拡張はトリガーされません。

一重引用符で囲まれた記号を含む書式文字列を使用できますprintf!たとえば、

$ name="boda"
$ printf 'hello! my name is %s! bye!\n' "$name"
hello! my name is boda! bye!

または

$ name="boda"
$ var=$(printf 'hello! my name is %s! bye!\n' "$name")
$ echo "$var"
hello! my name is boda! bye!

おすすめ記事