echo 输出感叹号(含有变量)问题

echo 输出感叹号(含有变量)问题
 [vonzhou@localhost kernel]$ name=voznhou
[vonzhou@localhost ~]$ myname="$name is me!"bash: !": event not found

因为 !” 会被当作命令行历史替换的符号来处理。不过在shell脚本中没有这样的问题。

不幸的是,你无法使用转义符来转义!

[vonzhou@localhost ~]$ myname="$name is me\!"[vonzhou@localhost ~]$ ]echo $myname

voznhou is me\!

解决方案之一,使用单引号,即

[vonzhou@localhost ~]$ myname='$name is me!'

[vonzhou@localhost ~]$ echo $myname

$name is me! 这时候虽然可以显示感叹号,但是内部变量$name却失去了原有的内容)

解决方案二,必须使用双引号,可以通过 set +H 来取消命令行历史替换

[vonzhou@localhost ~]$ set +H

[vonzhou@localhost ~]$ myname="$name is me\!"

[vonzhou@localhost ~]$ echo $myname

voznhou is me\! ---无需转义)

[vonzhou@localhost ~]$ myname="$name is me!"

[vonzhou@localhost ~]$ echo $myname

voznhou is me! ----OK !)

解决方案三,不要将叹号放入“ ”中 

[vonzhou@localhost ~]$ name=vonzhou

[vonzhou@localhost ~]$ myname="$name is me!"

bash: !": event not found

[vonzhou@localhost ~]$ myname="$name is me"!! ---发现只能是一个感叹号,原因暂时不明)

myname="$name is me"name=vonzhou

[vonzhou@localhost ~]$ myname="$name is me"! OK 了)

[vonzhou@localhost ~]$ echo $myname

vonzhou is me!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页