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

plh*_*lhn 0 linux bash arguments options operands

我有一个名字的文件-q(看起来这是偶然的)

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

$ cat '-q'
$ cat "-q"
$ cat $'-q'
Run Code Online (Sandbox Code Playgroud)

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

有没有办法看到它的内容?

mkl*_*nt0 5

sjsam的有用答案提供了可行的解决方案,但值得深入挖掘:

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

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

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

POSIX要求任何操作数之前都有所有选项(如果有的话),但GNU实用程序放宽了这个要求,以便为了方便起见,允许混合选项和操作数.

无论哪种方式,-后跟字母或数字通常意味着一个选项.

这样才能让路过的操作数碰巧开始-,特殊的选项--可以用来告诉任何实用程序:对待任何后续参数作为操作数,即使它们看起来像选项.


由于-q这种情况下的操作数看起来像一个选项,因此--在它之前将其标记为操作数是必须的.

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

  • -q包含元字符,所以壳传递给它原样cat-没有引用需要的.

  • 引用('-q',"-q",$'-q',\-q)确实在这种情况下没有危害,但绝对没有影响这里,因为shell -应用了任何扩展后-只需删除任何引号字符(这一过程称为引用删除字传递给之前)cat(作为查尔斯达菲在对这个问题的评论中指出.