【问题标题】:How to write "!" symbol between double quotes in bash?怎么写 ”!” bash中双引号之间的符号?
【发布时间】:2015-11-29 08:48:03
【问题描述】:

当将! 符号放在双引号字符串中时,我不知道如何在 bash 脚本中编写它。

例如:

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

发生了一些疯狂的事情:

Boda-Cydo-Sith-Computer:~$ age=20
Boda-Cydo-Sith-Computer:~$ name='boda'
Boda-Cydo-Sith-Computer:~$ var="hello! my name is $name! bye!"

当我在最后一个命令中按回车键时,命令会重复自身(输入自身)而没有最后一个 !

Boda-Cydo-Sith-Computer:~$ var="hello! my name is $name! bye"

如果我再按回车键

Boda-Cydo-Sith-Computer:~$ var="hello! my name is $name bye"

如果我再次按回车,它就会消失,没有任何输出

Boda-Cydo-Sith-Computer:~$ 

如果我试试这个:

Boda-Cydo-Sith-Computer:~$ echo "hello\! my name is $name\! bye\!"

然后输出:hello\! my name is boda\! bye\!

如果我使用单引号,那么我的名字不会被扩展:

Boda-Cydo-Sith-Computer:~$ echo 'hello! my name is $name! bye!'

输出为:hello! my name is $name! bye!

我是这样工作的:

Boda-Cydo-Sith-Computer:~$ echo "hello"'!'" my name is $name"'!'" bye"'!'

但是"' 是一大混乱,无法理解/编辑/维护/更新。

谁能帮忙?

【问题讨论】:

  • 它在这里工作......你用它做什么?
  • 您当然可以解释您键入的命令并将结果复制并粘贴到此处。
  • 大家好,我更新了我的问题 + 赞成您的答案以寻求帮助:)
  • 您使用的是 Mac OS X 吗?如果是这样,历史扩展可能会进行。尝试set +o histexpand 禁用它。
  • 重复:unix.stackexchange.com/q/246170/4667superuser.com/q/1006777/4714 -- 不要将同一个问题发布到多个站点

标签: linux string bash shell unix


【解决方案1】:

如果启用历史扩展(通常是这样,除非您特别禁用它),! 后跟非空格的内容将尝试查找历史中以后面的字符串开头的最后一个命令。

因此,您的代码中唯一有问题的 ! 出现在 bye! 中。您可以添加一个尾随空格(至少可以这样说,这肯定感觉很hacky),或者您可以像以前一样将它放在单引号中,但是没有必要对另一个! 这样做(因为它们后面跟着一个空格),所以该命令并不难阅读/编辑:

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

这就是你所需要的。或者,当然,如果您不打算使用 shell 的历史扩展功能,您可以随时使用set +o histexpand 禁用它,这样就不会出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-17
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多