`-` 只能与 cd 一起使用吗?

`-` 只能与 cd 一起使用吗?

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,例如grepawk

其他应用程序可以用作-他们选择的任何内容的简写,正如 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

相关内容