我們平時使用Linux的時候經常遇到這樣一個問題,舉例有這樣一種情況:執行命令
$ cp /etc/apt/sources.list /etc/apt/sources.list.bak
這裡面有個問題,明明 /etc/apt/sources 這幾個字都是一樣的,為什麼要打兩遍?這樣的還算短了,要是更深層的目錄,那花的力氣可就大了。跟上面例子很相似的情況是:在備份一個文件,重命名一個文件,或是創建一個鏈接,都要進行類似的操作,重復一個相同的路徑。通常比較明智的做法是先 cd 到那個目錄,然後在那個目錄下進行操作,完後再 cd 回來。不過這樣做還是比較麻煩,有沒有足不出戶的解決方法?答案是肯定的。
Bash 有個功能叫大括號擴展,大括號包圍的,用逗號隔開的參數會擴展為獨立的多個參數。這樣講您一定懵了,具體一點,上面那個備份文件的例子可以寫成:
$ cp /etc/apt/sources.{list,list.bak}
Shell 在解釋時會自動將後面的參數擴展成兩個,就變成了和上面一樣的完整命令。這樣就實現了足不出戶操作,而前面那一串目錄只要打一次就行,連 cd 也免敲了。
其實這個命令還可以再簡化,那個 list 也可以並過去的。之前我一直在想,拿什麼來代表空白,其實什麼都不用寫就行了。
$ cp /etc/apt/sources.list{,.bak}
這樣逗號前面沒東西,那麼參數就保持原來的不變,逗號後面的照樣擴展