cat `-q` file (in linux) - 传递看起来像选项的操作数
cat `-q` file (in linux) - passing operands that look like options
我有一个文件,名字是-q
(看起来是无意中制作的)
我想看看它的内容,所以我尝试了这些
$ cat '-q'
$ cat "-q"
$ cat $'-q'
但没有任何效果。(都给出相同的错误cat: invalid option -- 'q'
)
有什么办法可以看到它的内容吗?
创建一个名为 -q
的文件 do
touch -- "-q"
并查看其内容
cat -- '-q' # Used single quotes to treat anything inside as literal characters
应该这样做。 --
表示后面的内容应该被视为位置参数。
请花点时间看看@rici 的[ 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) before passing the word to cat
(as Charles Duffy 的过程会在问题的评论中注明)。
我有一个文件,名字是-q
(看起来是无意中制作的)
我想看看它的内容,所以我尝试了这些
$ cat '-q'
$ cat "-q"
$ cat $'-q'
但没有任何效果。(都给出相同的错误cat: invalid option -- 'q'
)
有什么办法可以看到它的内容吗?
创建一个名为 -q
的文件 do
touch -- "-q"
并查看其内容
cat -- '-q' # Used single quotes to treat anything inside as literal characters
应该这样做。 --
表示后面的内容应该被视为位置参数。
请花点时间看看@rici 的[ 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) before passing the word tocat
(as Charles Duffy 的过程会在问题的评论中注明)。