
BASH 中有一個非常方便的參數/變數擴展功能,我在歷史上從未見過。我檢查了歷史記錄和 BASH 本身的手冊頁。不在那裡……也許我錯過了。
範例:我經常使用 ssh,我可以透過變數擴展來做到這一點。
[email protected]
假設我只想提取主機 - 相反,刪除用戶名。
hostonly=${host##*@}
如果我
echo $hostonly
我得到:
bar.org
我的問題: 是否可以透過命令列歷史記錄來做到這一點?
例如。
命令1:
ssh [email protected]
命令2:
ssh gary@!!:##*@
當然,這是行不通的,但是有人可以確認這種類型的模式匹配是否可用嗎?
謝謝!
布布諾夫
答案1
人們經常錯過的一個巧妙的技巧是命令r
(它本身就是命令的一個特例fc
):
$ ssh [email protected]
(...)
$ r foo=baz
更一般的情況是
$ fc -s foo=bar ssh
它允許您透過子字串從歷史記錄中選擇命令,然後執行指定的替換並運行它。如果您省略-s
,它將載入該命令$EDITOR
以進行更複雜的修改;命令列編輯大多數情況下不需要這樣做,但有些編輯很難在命令列上完成。
您也可以使用!
歷史引用語法進行相當複雜的操作,但由於歷史原因(基本歷史機制是早期建立的csh
,所有增強功能大多保持相容性)它使用不同的語法。看這裡了解詳情。
答案2
$ ssh [email protected]
...
$ ^foo^gary^
...
使用“gary”而不是“foo”作為用戶名重複該命令。以下的工作方式相同:
$ ssh [email protected]
...
$ !!:s/foo/gary/
...