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!