- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
! 符號在 Linux 中不但可以用作否定符號,還可以用來從歷史命令記錄中取出命令或不加修改的執行之前運行的命令。下面的所有命令都已經在 Bash Shell 中經過確切地檢驗。盡管我沒有試過,但大多都不能在別的 Shell 中運行。這里我們介紹下 Linux 命令行中符號 ! 那驚人和奇妙的用法。
執行上一條命令
例如,在執行完上面一條命令后,可以使用下面的方式再次執行上一條命令:
$ whereis bash #執行命令
bash: /bin/bash /etc/bash.bashrc
$ !! #再次執行上一條命令
whereis bash
bash: /bin/bash /etc/bash.bashrc
!!代表了上一條執行的命令。可以看到,當輸入兩個感嘆號時,它顯示上條命令的同時會執行上一條命令。當然了,通常我們還會想到使用“UP”鍵來完成這個事情。但是如果是基于上條命令擴充,!!就來得更加方便了。
比如,你想查看某個文件,但是忘了輸入more:
$ /opt/user/test.txt #忘記輸入more
$ more !! #這樣是不是快多了?
使用!!是不是方便多了?
使用上個命令第一個或最后一個的參數執行命令
使用上條命令最后一個參數
比如,你在使用ls列出目錄內容時,沒有帶任何參數,但是想再次執行,帶上-al參數,又不想輸入長長的參數,可以使用下面的方式:
$ ls /etc/udev
/etc/udev
$ ls -al !$
ls -al /etc/udev
-r--r--r-- 1 root root 0 Jan 20 09:30 /etc/udev
這里的!$代表了上一條命令的最后一個參數。
使用上條命令第一個參數
而使用上條命令的第一個參數只需要使用!^,例如:
$ ls -al !^
去掉最后一個參數執行上一個命令
如果想執行上條命令,但不想帶上最后一個參數:
$ ls -al dir #假設dir是一個很長的字符串
$ !:-
ls -al
什么場景下可能會用呢?比如你上一條命令最后一個參數是一個長長的字符串,而你恰好不想不用它,并且退格鍵刪除又慢的時候,可以使用上面的方法。
使用上條命令的所有參數
前面說了使用上條命令的最后一個參數,那如果不是最后一個參數,該如何使用呢?很簡單,使用!*即可。例如我們在輸入find命令輸錯了,想要糾正的時候:
$ finsd -name "foo.zip" # 這里特意輸錯了find命令
$ find !*
find ./ -name "foo.zip"
./bar/foo.zip
./data/py/foo.zip
使用上條命令指定的參數
有的讀者可能會問了,如果我只想用其中某個參數呢?按照![命令名]:[參數號]的規則即可。例如:
$ cp -rf dira dirb/ #將dira拷貝到dirb
$ ls -l !cp:2 #查看dira的內容
ls -l dira
total 0
-rw-rw-r-- 1 hyb hyb 0 Jan 20 16:18 barfile
當上條命令的參數很長,而你需要取用中間的某個參數時,效果就比較明顯了。
執行上一條以關鍵字開頭的命令
例如,執行上一條find命令:
$ !find #執行上條以find開頭的命令
邏輯非的作用
這個是它最為人所熟悉的作用,例如刪除除了cfg結尾以外的所有文件:
rm !(*.cfg)
小結
驚嘆號的其他驚嘆功能一覽:
!!
上一條命令
!$
上一條命令中的最后一個參數
!:-
上一命令除了最后一個參數
!*
上一條命令中的所有參數
!str
最近一條以str開頭的命令
!?str?
最近一條包含str的命令
!n
順數第n條命令
!-n
倒數第n條命令
^old^new
將上一命令中的old替換為new
!!:gs/old/new
將上一命令中的old替換為new
!scp:gs/old/new
將上一scp命令中的old替換為new
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP