这些命令有什么区别?

这两个命令有什么区别:我在运行每一行之前都使用了 cd $HOME/directory/test/
cd ~
cd /
cd ~/
cd -
cd --
cd /.
cd $HOME
cd $USR
cd

而且所有这些都有相同的行为。有什么区别?


请提出一个问题。 - Avinash Raj
10@AvinashRaj 八个单独的问题,每个命令一个问题?对我来说,只有这个问题似乎更好。这些命令都非常相似,做着相似的事情。这个问题是关于为什么它们看起来都在做同样的事情。而且还有一个很好、详尽的答案,似乎回答了整个问题,这通常是一个线索,表明实际上只是一个问题。另一方面,我们可能会找到一些早期的问题来重复提问... - Eliah Kagan
6@AvinashRaj:这是一个简单的问题。 - Jack
2个回答

简单的命令cd <dir>用于切换目录到<dir>
  • ~表示$HOME目录。
  • /表示根目录
  • ~/也表示$HOME目录。唯一的区别是它明确地显示它是一个目录(以斜杠结尾)。cd ~/cdcd ~cd $HOME都是完全相同的操作。
  • cd -将工作目录更改为上一个工作目录

这些特殊符号 "."(点)和 ".."(点点)[相对参数]:
"." 符号代表当前目录,而 ".." 符号代表当前目录的父目录。

$USER$HOME环境变量

$USER = 当前登录用户的名称。该变量由系统设置。您可能不应手动更改其值。(例如:myuser1)

$HOME = 当前登录用户的主目录位置。(例如:/home/myuser1)

建议使用 cd "$HOME"cd "$USER",以便在遇到空格等情况下为 cd 提供正确的输入。


1@KasiyA // 被视为 /。所以 cd//homecd/home 是一样的。 - Pandya
4@Pandya 您可能希望添加关于当您cd到未定义的环境变量时会发生什么的信息。(该变量扩展为空字符串,并运行无参数的cd命令,以更改为主目录。)这可能就是cd $USR出现问题的原因,因为虽然USER变量几乎总是定义的,但很少有定义USR - Eliah Kagan
我不知道“-”的意思。这和“..”是一样的吗? - Jack
4@Jack:不,它们有不同的功能。**cd -** 会带你回到上次工作的目录(由 $OLDPWD 指定)。它还会打印出旧目录的路径。.. 指的是父目录;**cd ..** 会将你移动到上一级目录。如果你之前正在父目录中工作,cd -cd .. 都会产生相同的效果。 - Amal Murali

cd ~

您的主目录更改。路径开头的~是一个缩写,表示“用户的主目录”。
cd /

更改根目录/。这里没有什么特别的事情发生。
cd ~/

尾随的斜杠“/”没有任何区别。它强制解释符号“~”为一个目录,但是“cd”命令无论如何都会这样做。(在指向目录的符号链接上,尾随的斜杠“/”会有所不同 - 比较“ls -ld /var/spool/mail”和“ls -ld /var/spool/mail/”)。
cd -

更改到之前使用cd命令所在的目录。这是cd命令的一个特殊情况:当其参数为-时,执行此操作。
cd --

大多数命令,包括 cd,参数 -- 表示其后的任何内容都将被视为操作数而不是选项。因此,例如 cd -- -P 表示切换到一个名为 -P 的目录,而 cd -P 则传递了 -P 选项(如果你要转换的路径通过符号链接,则会产生差异)。当 -- 后没有参数时,-- 不起作用;这个命令等同于普通的 cd。而 cd 如果没有参数,则是 cd ~ 的简写。

cd /.

等同于cd /,因为/./是同一个目录(.通常单独使用,表示“当前目录”)。
cd $HOME

更改您的主目录。如果您的主目录路径包含空格或其他字符,则此操作将失败。始终在变量替换周围使用双引号cd "$HOME"
cd $USR

很有可能,这个操作并没有任何效果,因为在你的shell中没有定义一个叫做USR的变量,所以运行的命令只是cd

我记得在某些情况下(bash脚本)**$HOME/<某个目录或文件>无法正常工作,而我不得不使用/home/$USER/<某个目录或文件>代替。同样适用于~/<某个目录或文件>**。所以肯定存在一些差异,其中建议使用一种而不是另一种(我不清楚)- 我错了吗? - Sadi
@KasiyA $foo在引号外会损坏包含空格或通配符\[*?(以及某些shell配置下的其他字符)的字符串。 - Gilles 'SO- stop being evil'
2在bash脚本中,"$HOME"始终表示调用用户的主目录。如果用户的主目录位于此位置(这在机构网络上并不总是情况),"/home/$USER"也会执行相同的操作。除非您需要执行与特定安装设置相关的操作,否则/home/$USER永远不正确。 - Gilles 'SO- stop being evil'