【问题标题】:Does '-' if standing for stdin have a specific name?如果代表标准输入,'-' 是否有特定名称?
【发布时间】:2015-05-19 14:58:00
【问题描述】:

在多个命令行应用程序中,如果将标准输入通过管道传输到它们,则需要提供- 字符而不是输入文件。

示例:

$ foo | bar -

现在我想知道:这个- 字符在这种情况下使用时是否有正式的特殊名称,例如虚线标准输入运算符或类似的东西?如果有,是哪一个?

我的问题的背景是,我想写一个函数来检测这个字符,然后相应地处理标准输入,而不是将参数解析为一个数组,我想知道该调用什么函数。

【问题讨论】:

  • 相关:man 1 getopt(如果您不想手动解析 ARGV 数组)。
  • 也许我遗漏了一些东西,但手册页没有说明处理标准输入的任何内容,是吗?
  • 不,但是您提到了处理参数的两种不同方式——将参数解析为数组,并专门寻找-——我认为您可能对更灵活和更容易的方式感兴趣getopt 提供的功能,不是(仅)针对这种特定情况,而是一般情况下。因此,“相关”评论,而不是答案。
  • 啊,好的,现在我明白了!谢谢:-)

标签: bash command-line pipe stdin


【解决方案1】:

POSIX 标准没有为- 字符的这种用法使用任何特殊名称。它说:

对于使用操作数表示要打开以进行读取或写入的文件的实用程序,“-”操作数应仅用于表示标准输入(或从上下文中明确指定输出文件时的标准输出) ) 或名为 -.

的文件

然后

如果要求在 POSIX.1-2008 的 Shell and Utilities 卷中描述的符合这些准则的实用程序接受或不接受表示标准输入或输出的操作数“-”,则解释了此用法在操作数部分。否则,如果此类实用程序使用操作数来表示文件,则操作数“-”是代表标准输入(或标准输出)还是代表名为 - 的文件是由实现定义的。

手册页似乎也没有使用任何特殊名称:

如果没有指定文件,或者如果给出了文件“-”,grep 搜索标准输入。

看来你必须自己发明名字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多