linux - cat `-q` 文件(在 linux 中)- 传递看起来像选项的操作数

标签 linux bash arguments command-line-arguments operands

我有一个名为-q的文件(看起来这是无意中制作的)

我想看看它的内容,所以我尝试了这些

$ cat '-q'
$ cat "-q"
$ cat $'-q'

但没有任何效果。(都给出相同的错误 cat: invalid option -- 'q')

有什么办法可以看到它的内容吗?

最佳答案

sjsam's helpful answer提供了可行的解决方案,但值得深入挖掘:

传递给 Unix 实用程序的参数(例如 cat)可以分为两组(使用 POSIX 术语):

  • options(例如,-l;取决于选项的定义,可能后跟 option-argument)- 开关修改实用程序的基本行为

  • 操作数(例如文件名)- 实用程序操作的数据

POSIX requires all options, if any, to come before any operands ,但是 GNU 实用程序放宽了这一要求以允许混合选项和操作数以方便使用。

无论哪种方式,- 后跟一个字母或数字通常表示一个选项

为了允许传递碰巧-开头的操作数特殊选项- 可用于告诉任何实用程序:将任何后续参数视为操作数,即使它们看起来像选项。


由于操作数 -q 在这种情况下看起来 像一个选项,在它前面加上 -- 以将其标记为 操作数 是必须的。

至于如何将字符串-q本身作为参数传递:

  • -q 包含没有 shell 元字符,因此 shell 按原样将它传递给cat - 无需引用。

  • 引用 ('-q', "-q", $'-q', \- q) 在这种情况下没有害处,但在这里绝对没有效果,因为 shell - 在应用任何扩展之后 - 简单地删除 任何引号字符(称为 quote removal 的过程),然后将单词传递给 cat(如 Charles Duffy 在问题的评论中注释)。

关于linux - cat `-q` 文件(在 linux 中)- 传递看起来像选项的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690364/

相关文章:

linux - GHC 是如何实现 unsafePerformIO 的?

mysql - 如何解释 shell 脚本中的 mysql 输出?

mysql - bash 使用 while read 在单个变量中连接字符串

java - 在 Java 中传递参数

linux - 如何重命名 Linux CentOS 7 上的所有(子)目录和文件

c++ - 列出名为 boost 的托管共享内存的名称

linux - 在 *nix shell 中更容易导航

python - 用于在磁盘上加载字符串和文件的函数?

linux - linux下lvs负载均衡器director IP应该配置在哪里