• linux中如何通过echo输出!(叹号)? -bash: !": event not found


    需求描述:

      今天在做通过echo结合passwd给用户改密码的过程中,出现无法修改的错误.

    错误如下:

    [root@testvm ~]# useradd mytest
    [root@testvm ~]# echo "my@test!" | passwd --stdin mytest
    -bash: !": event not found

    错误分析:

      经过查找该命令发现叹号!在linux中有特殊的定义,可以用来执行历史的命令或者当做逻辑否定等方式来使用,所以呢,叹号是一个特殊的字符,想要将字符进行当做普通字符来使用,必须进行转义.

    问题处理:

    1.通过转义字符对!号进行转义

    [root@testvm ~]# echo "my@test!"
    my@test!

    备注:发现这样的输出里面就多了.所以,这个方法不对.

    2.echo后面使用单引号输出

    [root@testvm ~]# echo 'my@test!'
    my@test!

    [root@testvm ~]# echo '$my@test! # %'
    $my@test! # %

    备注:如果使用单引号,那么就会原样的输出字符串,不进行转义,不取变量值

    3.再次通过echo和passwd修改用户密码

    [root@testvm ~]# echo 'my@test!' | passwd --stdin mytest
    Changing password for user mytest.
    passwd: all authentication tokens updated successfully.
    [root@testvm ~]# su - mytest
    [mytest@testvm ~]$ su - mytest
    Password: 
    [mytest@testvm ~]$ 

    备注:这样就可以在密码中包括!这个符号了.

    4.经过测试发现,如果使用双引号输出字符最后一位是叹号!会报错,如果后面有空格就不会报错

    [root@testvm ~]# echo "my@test! "  #后面有空格,就能够输出叹号,所以如果叹号是最后一位是要接事件event的,但是这样密码中也有空格了.
    my@test! 
    [root@testvm ~]# echo "my@test!"
    -bash: !": event not found

    5.经过测试,echo后面直接接字符就可以即不将其放入到单引号也不放在双引号中

    [root@testvm ~]# echo my@test! | passwd --stdin mytest
    Changing password for user mytest.
    passwd: all authentication tokens updated successfully.
    [root@testvm ~]# su - mytest
    [mytest@testvm ~]$ su - mytest
    Password: 
    [mytest@testvm ~]$ 

    备注:同样达到一样的效果,这里没有使用单引号,也没有使用双引号.

    文档创建时间:2018年7月2日13:28:20

    文档修改1:增加4这个测试,使用双引号,!号后面加空格可以输出,但是密码不符合预期的要求.          时间:2018年7月2日13:35:08

    文档修改2:增加5的内容,echo后面不使用单引号,也不使用双引号进行叹号的输出.          时间:2018年7月2日13:43:44

  • 相关阅读:
    第二十九课 循环链表的实现
    第二十八课 再论智能指针(下)
    第二十七课 再论智能指针(上)
    第二十六课 典型问题分析(Bugfix)
    普通new和placement new的重载
    leetcode 581. Shortest Unsorted Continuous Subarray
    leetcode 605. Can Place Flowers
    leetcode 219. Contains Duplicate II
    leetcode 283. Move Zeroes
    leetcode 217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/9253410.html
Copyright © 2020-2023  润新知