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

例子:

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

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

  • 切换到上一个目录。

    cd -

  • 监听端口12345并解除发送给它的数据。

    nc -l -p 12345 | tar xvzf -

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

70178 次浏览

它意味着使用程序的标准输入流。

cd而言,它的意思有所不同: 改变先前的工作目录。

这不是魔法。有些命令将 -解释为用户希望从 stdin 读取或写入 stdout; 对于 shell 来说,-没有任何特殊之处。

如果您指的是 tar命令末尾的裸 -,那么这在许多希望使用文件的命令中都很常见。

它允许您指定标准输入或输出,而不是 真的文件名。

这就是第一个和第三个例子的情况。例如,cdrecord命令获取标准输入(由 mkisofs产生的 ISO 图像流)并将其直接写入 /dev/dvdrw

使用 cd命令,每次更改目录时,它都会存储来自的目录。如果使用特殊的 -“目录名”执行 cd,它将使用记忆的目录而不是真正的目录。通过使用它,您可以很容易地在两个目录之间快速切换。

其他命令可能将 -视为 与众不同特殊值。

魔法就在大会里。几千年来,人们一直使用“-”来区分选项和参数,并在文件名中酌情使用“-”来表示 stdin 或 stdout。不要低估传统的力量!

-的意思正是每个命令希望它表示的意思。这里有几个常见的惯例,你们已经在其他答案中看到了大多数的例子,但是没有一个是100% 通用的。

就 shell 而言,-字符没有什么神奇之处(除了 shell 本身以及它的一些内置命令(如 cdecho)以常规方式使用它)。有些字符,如 \'"“神奇的”,无论它们出现在哪里都有特殊的含义。这些是“ shell 元字符”。-不是那样的。

查看给定命令如何使用 -阅读该命令的文档