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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM