Bash
‘cd -’ 和 ‘cd ~-’ 的區別
Bash 命令
cd -
列印以前使用的目錄並對其進行更改。
另一方面,Bash 命令
cd ~-
直接更改到以前使用的目錄,而不回顯任何內容。
這是唯一的區別嗎?每個命令的案例是什麼?
這裡有兩件事在起作用。首先,將
-
only 擴展到您以前的目錄。這在(強調我的)cd
部分中進行了解釋:man bash
在嘗試更改目錄之前,參數 of
-
將轉換為 $OLDPWD。 如果使用 CDPATH 中的非空目錄名,或者如果-
是第一個參數,並且目錄更改成功,則將新工作目錄的絕對路徑名寫入標準輸出。 如果目錄更改成功,則返回值為 true;否則為假。因此,一個簡單的
cd -
操作會將您移回之前的目錄並列印出該目錄的名稱。另一個命令記錄在“波浪號擴展”部分中:如果波浪號前綴是 a
~+
,shell 變數 PWD 的值將替換波浪號前綴。如果波浪號前綴是 a~-
,那麼 shell 變數 OLDPWD 的值(如果已設置)將被替換。如果波浪號前綴中波浪號後面的字元由數字 N 組成,可選地以 a+
或 a-
為前綴,波浪號前綴將替換為目錄堆棧中的相應元素,因為它將由呼叫的 dirs 顯示波浪號前綴作為參數。如果波浪號前綴中波浪號後面的字元由沒有前導+
或的數字組成-
,+
則假定為 ,。舉個例子可能更容易理解:
$ pwd /home/terdon $ cd ~/foo $ pwd /home/terdon/foo $ cd /etc $ pwd /etc $ echo ~ ## prints $HOME /home/terdon $ echo ~+ ## prints $PWD /etc $ echo ~- ## prints $OLDPWD /home/terdon/foo
所以,一般來說,這
-
意味著“上一個目錄”。這就是為什麼cd -
它本身會讓你回到原來的地方。主要區別在於
cd -
特定於cd
內置。如果你嘗試echo -
它只會列印一個-
. 這~-
是波浪號擴展功能的一部分,其行為類似於變數。這就是為什麼你可以echo ~-
得到一些有意義的東西。您也可以在其中使用它,cd ~-
但您也可以在任何其他命令中使用它。例如cp ~-/* .
,這將相當於cp "$OLDPWD"/* .