cd -
可以在当前目录和上一个目录之间切换。
似乎我-
以前见过使用它作为其他命令的参数,尽管我不记得 if 的-
含义与 with 相同cd
。
我发现这-
不适用于ls
.
-
只能和cd一起使用吗?
答案1
-
定义于POSIX 实用程序语法指南作为标准输入:
Guideline 13:
For utilities that use operands to represent files to be opened for either
reading or writing, the '-' operand should be used to mean only standard input
(or standard output when it is clear from context that an output file is being
specified) or a file named -.
您可以看到对文件进行读取或写入操作的实用程序的定义。cd
不属于这些实用程序,因此-
in cd 不遵循此准则。
此外,POSIX 还定义了-
自己的含义光盘:
-
When a <hyphen> is used as the operand, this shall be equivalent to the
command:
cd "$OLDPWD" && pwd
which changes to the previous working directory and then writes its name.
答案2
cd -
实际上是 的简写cd "$OLDPWD" && pwd
,$OLDPWD
每次将目录更改为刚刚所在的目录时都会设置其中。
处理-
取决于应用程序。一些应用程序用来-
表示STDIN
,例如grep
,awk
其他应用程序可以用作-
他们选择的任何内容的简写,正如 Michael 的回答所指定的,其中su
,-
是--login
答案3
这POSIX 实用程序语法指南(特别是#13)指定对于期望读取文件名的实用程序,-
表示标准输入,对于期望写入文件名的实用程序,-
表示标准输出。例如,cat somefile -
将 的内容复制somefile
到其标准输出,然后复制在标准输入上读取的内容。
本指南不适用于该cd
命令,因为它不读取或写入文件。cd
做了一些不同的事情:参数的-
意思是“上一个目录”。该命令cd -
相当于cd "$OLDPWD" && pwd
.此行为特定于cd
命令以及直接启发的命令,例如pushd
.
请注意,这-
是一个操作数,而不是一个选项。只有以-
and 开头的参数不只是-
or--
才是选项。作为操作数的主要含义是--
不影响其特殊含义。例如,cd -- -P
更改为名为 的子目录-P
,但cd -- -
与 相同cd -
,它不会更改为名为 的目录-
。同样,cat -- -
不从调用的文件读取-
,而是从标准输入读取。
答案4
尽管 Michael 提到这一点su
,其他应用程序可以用来-
表示它们想要的任何含义(从标准输入读取很常见),Git 的使用方式确实-
类似于cd
,用于更改分支。
$ git status
On branch master
$ git checkout foobar
$ git status
On branch foobar
$ git checkout -
$ git status
On branch master