Cd-Command
~ 是 $HOME,但有時呢?
光碟~
做同樣的事情
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
。