linux中如何通过echo输出!(叹号)? -bash: !": event not found
Posted QA-3K
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中如何通过echo输出!(叹号)? -bash: !": event not found相关的知识,希望对你有一定的参考价值。
需求描述:
今天在做通过echo结合passwd给用户改密码的过程中,出现无法修改的错误.
错误如下:
[[email protected] ~]# useradd mytest [[email protected] ~]# echo "[email protected]!" | passwd --stdin mytest -bash: !": event not found
错误分析:
经过查找该命令发现叹号!在linux中有特殊的定义,可以用来执行历史的命令或者当做逻辑否定等方式来使用,所以呢,叹号是一个特殊的字符,想要将字符进行当做普通字符来使用,必须进行转义.
问题处理:
1.通过转义字符对!号进行转义
[[email protected] ~]# echo "[email protected]!" [email protected]!
备注:发现这样的输出里面就多了.所以,这个方法不对.
2.echo后面使用单引号输出
[[email protected] ~]# echo ‘[email protected]!‘ [email protected]!
[[email protected] ~]# echo ‘[email protected]! # %‘
[email protected]! # %
备注:如果使用单引号,那么就会原样的输出字符串,不进行转义,不取变量值
3.再次通过echo和passwd修改用户密码
[[email protected] ~]# echo ‘[email protected]!‘ | passwd --stdin mytest Changing password for user mytest. passwd: all authentication tokens updated successfully. [[email protected] ~]# su - mytest [[email protected] ~]$ su - mytest Password: [[email protected] ~]$
备注:这样就可以在密码中包括!这个符号了.
4.经过测试发现,如果使用双引号输出字符最后一位是叹号!会报错,如果后面有空格就不会报错
[[email protected] ~]# echo "[email protected]! " #后面有空格,就能够输出叹号,所以如果叹号是最后一位是要接事件event的,但是这样密码中也有空格了. [email protected]! [[email protected] ~]# echo "[email protected]!" -bash: !": event not found
5.经过测试,echo后面直接接字符就可以即不将其放入到单引号也不放在双引号中
[[email protected] ~]# echo [email protected]! | passwd --stdin mytest Changing password for user mytest. passwd: all authentication tokens updated successfully. [[email protected] ~]# su - mytest [[email protected] ~]$ su - mytest Password: [[email protected] ~]$
备注:同样达到一样的效果,这里没有使用单引号,也没有使用双引号.
文档创建时间:2018年7月2日13:28:20
文档修改1:增加4这个测试,使用双引号,!号后面加空格可以输出,但是密码不符合预期的要求. 时间:2018年7月2日13:35:08
文档修改2:增加5的内容,echo后面不使用单引号,也不使用双引号进行叹号的输出. 时间:2018年7月2日13:43:44
以上是关于linux中如何通过echo输出!(叹号)? -bash: !": event not found的主要内容,如果未能解决你的问题,请参考以下文章