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')
有没有办法看到它的内容?
sjsam的有用答案提供了可行的解决方案,但值得深入挖掘:
传递给Unix实用程序(例如cat)的参数可以分为两组(使用POSIX术语):
options(例如,-l;取决于选项的定义,可能后跟option-argument) - 用于修改实用程序基本行为的开关.
操作数(例如,文件名) - 实用程序操作的数据.
POSIX要求在任何操作数之前都有所有选项(如果有的话),但GNU实用程序放宽了这个要求,以便为了方便起见,允许混合选项和操作数.
无论哪种方式,-后跟字母或数字通常意味着一个选项.
这样才能让路过的操作数是碰巧开始-,特殊的选项--可以用来告诉任何实用程序:对待任何后续参数作为操作数,即使它们看起来像选项.
由于-q这种情况下的操作数看起来像一个选项,因此--在它之前将其标记为操作数是必须的.
至于如何将字符串-q本身作为参数传递:
-q包含无壳元字符,所以壳传递给它原样对cat-没有引用需要的.
引用('-q',"-q",$'-q',\-q)确实在这种情况下没有危害,但绝对没有影响这里,因为shell -应用了任何扩展后-只需删除任何引号字符(这一过程称为引用删除字传递给之前)cat(作为查尔斯达菲在对这个问题的评论中指出.