怎么写 ”!” 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!

答案2

禁用历史扩展;仅在交互式 shell 中启用,通过:set +H

相关内容