cd -
可以在当前目录和上一个目录之间切换。
似乎以前我曾经-
将其用作其他命令的参数,尽管我不记得它的-
含义是否与with相同cd
。
我发现-
不适用于ls
。
难道-
只有在用CD?
git checkout -
切换到上一个分支
-
以相同的方式与其他内置函数一起使用?
pushd
,是。否则,“上一个目录”的含义不是非常有用的默认值。
cd -
可以在当前目录和上一个目录之间切换。
似乎以前我曾经-
将其用作其他命令的参数,尽管我不记得它的-
含义是否与with相同cd
。
我发现-
不适用于ls
。
难道-
只有在用CD?
git checkout -
切换到上一个分支
-
以相同的方式与其他内置函数一起使用?
pushd
,是。否则,“上一个目录”的含义不是非常有用的默认值。
Answers:
的POSIX实用程序语法准则(具体#13)指定为期望的文件名,从读公用事业-
装置标准输入,以及用于该期望的文件名写入到,公用事业-
装置标准输出。例如,cat somefile -
将的内容复制somefile
到其标准输出,然后将其在其标准输入上读取的内容复制。
该准则不适用于该cd
命令,因为它不会读取或写入文件。cd
所做的事情有所不同:参数的-
意思是“上一个目录”。该命令cd -
等效于cd "$OLDPWD" && pwd
。此行为特定于cd
命令以及直接启发的命令(例如)pushd
。
请注意,这-
是一个操作数,而不是一个选项。仅以-
和开头的参数不等于-
或--
为选项。作为操作数的主要含义是--
不影响其特殊含义。例如,cd -- -P
更改为子目录-P
,但cd -- -
与相同cd -
,但不更改为子目录-
。同样,cat -- -
不是从称为-
标准输入的文件中读取文件。
-
在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
不属于这些实用程序,因此-
cd中不遵循此准则。
另外,POSIX也-
用cd定义了自己的意思:
-
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.
cd -
实际上是的简写cd "$OLDPWD" && pwd
,$OLDPWD
每次将目录更改为您所在的目录时都会在设置。
处理-
取决于应用程序。一些应用程序-
用来表示STDIN
,例如grep
,awk
其他应用程序可以-
用作他们选择的任何内容的简写,正如Michael的答案所指定的su
,-
是的简写。--login
任何程序都可以-
用作参数,表示它们想要的任何内容。一个常见的示例是su
,它-
用作的简写--login
。我能想到的唯一约定是,从文件读取的程序经常-
用来表示“从stdin读取”,但这完全取决于程序
正如gnouc回答的,在...中-
有自己的含义cd
。
但是,您可以-
使用在其他程序中复制的行为~-
。例如:
cd /etc
cd /
ls ~- #lists the contents of the /etc directory
vim ~-/fstab #opens the file /etc/fstab in vim
cd
是内置的,而不是外部命令(它甚至也不会以任何方式工作)。cd -
因此是shell级别的功能。