Cd-Command

~ 是 $HOME,但有時呢?

  • August 18, 2021

光碟~

做同樣的事情

cd $HOME

這也與

cd /home/tandu

然而,

cd ~not-tandu

更改為/home/not-tandu

這純粹是一種語法選擇嗎?核心(或執行檔)如何處理這個問題?如果省略其他所有內容,cd是否有添加斜杠的特殊情況?~也就是說,~/~換到同一個目錄,不過~a是一個目錄上去。對於您更改到的任何其他目錄,不能這樣說。

~是許多 shell 提供的別名$HOME,但$HOME更通用。 $HOME實際上是要求 shell 在此處插入(替換)環境變數 HOME。有很多不同的環境變數可以替換,嘗試執行env一個列表。請注意,~當它不在單詞的開頭時,它並不總是被辨識。嘗試以下兩個命令進行比較:

ls /~
ls /$HOME

第一個被傳遞給 ls 執行檔/~,然後它嘗試查看在~根目錄中呼叫的文件,第二個擴展$HOME並成為//home/user然後作為命令行參數傳遞給 ls 執行檔。所有 POSIX 系統(POSIX 是 UNIX 和 Linux 系統如何執行的標準)都允許將多個斜杠視為一個斜杠,因此//home/user/home/user. ~username是告訴 shell 在 passwd 文件中查找使用者名並返回其主目錄的快捷方式。沒有等效的環境變數。所有這些替換都是由 shell 完成的,並且大多數都支持,但只有環境變數像$HOME保證被所有 shell 支持。還,cd實際上是一個內置命令。這是一個特殊的指令,告訴 shell 本身改變目錄。它不像其他可以作為單獨的執行檔實現的 shell 內置程序echo,因為它用於更改 shell 程序的基本屬性。 echo出於性能原因,它只是一個內置的 shell,但在過去的 UNIX 中,它只能作為它自己的執行檔使用/bin/echo

引用自:https://unix.stackexchange.com/questions/34379