我一直看到这个符号,但我的书尚未阐明它的含义。手册页或网络搜索都没有澄清这一点。起初我相信它是一个 I/O 符号,但当我尝试使用它时却不起作用。
例如,在patch
Man 和 Info 文档中,它说
您还可以使用“-i PATCHFILE”或“--input=PATCHFILE”选项指定从何处读取补丁。如果您未指定 PATCHFILE,或者 PATCHFILE 为
'-'
,则“path”将从标准输入读取补丁(即“diff”输出)。
每当我看到“-”符号时,它后面(在某些时候)几乎都会提到标准输入。
我在这里缺少什么?该符号是否引用标准输入?在 Bash 上下文中“-”是什么意思?
答案1
-
Bash根本不解释参数。它只是许多程序实现的约定。
当程序正常处理文件时,您通常会看到它,因此它们需要一些文本字符串,当您希望它处理文件时,它们不太可能是要使用的文件名stdin
/stdout
反而。
您不太可能会遇到一个故意命名为 的文件的系统-
,因为这是标准的选项字符在 Unix 上。但是,因为命名文件实际上是合法的-
- 或者更一般地说任何文件开始with -
— 许多能够理解某个-
参数的程序还理解选项--
,意思是“停止处理选项”。这可以让您执行诸如删除名为的文件之类的操作-
:
$ rm -- -
答案2
据我所知,这不是 bash 构造,而是一种约定。应用程序用于-
表示从 stdin 读取或写入 stdout 来代替实际文件或写入 /dev/stdin /dev/stdout。