这些命令有什么区别?

αғs*_*нιη 5 command-line

这些命令有什么区别:我cd $HOME/directory/test/在运行每一行之前使用过:

cd ~
cd /
cd ~/
cd -
cd --
cd /.
cd $HOME
cd $USR
cd
Run Code Online (Sandbox Code Playgroud)

所有这些都做同样的行为。什么是区别?

Pan*_*dya 11

cd <dir>目录更改为<dir>.

  • ~表示$HOME目录
  • /表示根目录
  • ~/也表示$HOME目录。唯一的区别是它明确显示它是一个目录(尾部斜杠)。cd ~/cdcd ~cd $HOME都做完全一样的事情。
  • cd -将工作目录更改为上一个工作目录

这些特殊符号“.” (点)和“..”(点点)[相对参数]

“.” 符号表示当前目录,“..”符号表示当前目录的父目录。


$USER并且$HOME环境变量

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

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

推荐使用cd "$HOME"or cd "$USER"so-thatcd在空间等的情况下得到正确的输入。

  • @Pandya 您可能想要添加有关将“cd”添加到未定义环境变量时会发生什么的信息。(变量扩展为一个空字符串并且运行没有参数的 `cd`,它会更改到主目录。)这可能是 `cd $USR` 发生的事情,因为虽然 `USER` 变量几乎总是被定义, `USR` 很少是。 (4认同)
  • @Jack:不,他们做不同的事情。**`cd -`** 带你到你工作的最后一个目录(由 `$OLDPWD` 给出)。它还打印出旧的目录路径。`..` 指的是父目录;**`cd ..`** 会让你提升一级。如果您之前在父目录中工作,`cd -` 和 `cd ..` 将具有相同的效果。 (4认同)

Gil*_*il' 8

cd ~
Run Code Online (Sandbox Code Playgroud)

更改到您的主目录。~路径的开头是一个缩写,意思是“用户的主目录”。

cd /
Run Code Online (Sandbox Code Playgroud)

更改到根目录/。这里没什么特别的。

cd ~/
Run Code Online (Sandbox Code Playgroud)

尾随/没有任何区别。它强制~解释为目录,但cd无论如何都会这样做。(尾随/对指向目录的符号链接产生影响 - 比较ls -ld /var/spool/maills -ld /var/spool/mail/。)

cd -
Run Code Online (Sandbox Code Playgroud)

更改到您在上一个cd命令之前所在的目录。这是cd命令的一个特例:当它的参数是 时-,它会这样做。

cd --
Run Code Online (Sandbox Code Playgroud)

对于包括 在内的大多数命令,cd参数--意味着之后出现的任何内容都将被视为操作数而不是选项。因此,例如cd -- -P意味着更改为名为 的目录-P,而cd -P传递-P选项(如果您更改的路径通过符号链接进行,则会有所不同)。当 之后没有参数时----不做任何事情;此命令等效于 plain cdcd反过来,没有参数是cd ~.

cd /.
Run Code Online (Sandbox Code Playgroud)

等价于cd /, 因为/./(.本身最有用,表示“当前目录”)相同的目录。

cd $HOME
Run Code Online (Sandbox Code Playgroud)

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

cd $USR
Run Code Online (Sandbox Code Playgroud)

很可能,这没有任何作用,因为USR您的 shell 中没有定义named 变量,因此运行的命令只是cd.

  • @Sadi 在 bash 脚本中,`"$HOME"` 始终表示调用用户的主目录。`"/home/$USER"` 只有当用户的主目录在这个位置时才会做同样的事情(这在机构网络上并不总是如此)。除非你需要做一些与特定安装设置相关的事情,否则 `/home/$USER` 永远不会正确。 (2认同)