命令行参数中的“-”(破折号)有什么魔力?

问题描述 投票:0回答:5

示例:

  • 创建 ISO 映像并将其直接刻录到 CD。

    mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -

  • 更改到上一个目录。

    cd -

  • 监听端口 12345 并解压发送到该端口的数据。

    nc -l -p 12345 | tar xvzf -

破折号的用途是什么以及如何使用它?

linux bash shell unix command-line
5个回答
153
投票

如果您指的是

-
命令末尾的裸露
tar
,那么这在许多想要使用文件的命令中很常见。

它允许您指定标准输入或输出,而不是“实际”文件名。 这就是您的第一个和第三个示例的情况。例如,

cdrecord

命令正在获取标准输入(由

mkisofs
生成的ISO图像流)并将其直接写入
/dev/dvdrw

使用

cd

命令,每次更改目录时,它都会存储您来自的目录。如果您使用特殊的

cd
“目录名称”执行
-
,它将使用记住的目录而不是真实的目录。您可以使用它轻松快速地在两个目录之间切换。

其他命令可能将

-

视为

不同
特殊值。


32
投票
-

解释为用户想要从

stdin
读取或写入
stdout
对于

shell

来说没有什么特别的。


21
投票
-

的意思正是每个命令想要的意思。有几种常见的约定,您已经在其他答案中看到了其中大多数的示例,但它们都不是 100% 通用的。


就 shell 而言,

-

字符没有什么神奇之处(除了 shell 本身及其一些内置命令(如

cd
echo
)以传统方式使用它)。有些字符,如
\
'
"
是“神奇的”,无论出现在哪里都具有特殊含义。这些是“shell 元字符”。 -不是那样的。

要了解给定命令如何使用

-

,请阅读该命令的文档

表示使用程序的标准输入流。

8
投票

cd

的情况下,它的含义有所不同:更改到之前的工作目录。


神奇之处在于约定。几千年来,人们使用

7
投票
作为前缀来区分选项和参数,并使用

-

 作为文件名来表示 stdin 或 stdout(视情况而定)。不要低估约定的力量!

© www.soinside.com 2019 - 2024. All rights reserved.