![Bashの二重引用符の間に「!」シンボルの書き方は? [コピー]](https://linux33.com/image/78393/Bash%E3%81%AE%E4%BA%8C%E9%87%8D%E5%BC%95%E7%94%A8%E7%AC%A6%E3%81%AE%E9%96%93%E3%81%AB%E3%80%8C%EF%BC%81%E3%80%8D%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
!
二重引用符で囲まれた文字列にシンボルを入れるときに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!
答え2
以下を使用して履歴拡張を無効にします。対話型シェルでのみ有効にしますset +H
。