我的名字是-q
文件(它看起來像這樣由事故讓)貓`-q`文件(在Linux中) - 通過操作數,看起來像選項
我想看看它的內容,所以我想這些
$ cat '-q'
$ cat "-q"
$ cat $'-q'
但毫無效果。(所有給出同樣的錯誤cat: invalid option -- 'q'
)
有沒有辦法看到它的內容?
我的名字是-q
文件(它看起來像這樣由事故讓)貓`-q`文件(在Linux中) - 通過操作數,看起來像選項
我想看看它的內容,所以我想這些
$ cat '-q'
$ cat "-q"
$ cat $'-q'
但毫無效果。(所有給出同樣的錯誤cat: invalid option -- 'q'
)
有沒有辦法看到它的內容?
創建一個名爲-q
文件做
touch -- "-q"
,並查看其內容
cat -- '-q' # Used single quotes to treat anything inside as literal characters
應該這樣做。 --
意味着接下來應該被視爲位置參數。
請花時間去看看@ RICI的[ answer ]這提醒有關單VS雙引號一些substle方面。
夠搞笑的,這不起作用。我在我的系統上試了一下,得到了'> cat:\ -q:沒有這樣的文件或目錄。 –
同樣的結果。也許'cat ./- q'? –
'貓 - 「-q」'工作。無論如何'--'是一個關鍵!謝謝。 ('cat - 「\ -q」'也不適用於我。) – plhn
sjsam's helpful answer提供了可行的解決方案,但它是值得更深的挖掘:
參數傳遞給Unix工具(如cat
)可分爲兩個組(使用POSIX術語):
選項(例如,-l
;根據選項的定義,可能跟隨一個選項形式參數) - 開關修改實用程序的基本行爲。
操作數(例如,一個文件名) - ,該實用上操作數據。
POSIX requires all options, if any, to come before any operands,但GNU公用事業放寬這項規定,以允許交織爲了方便選項和操作。
無論哪種方式,-
後跟一個字母或數字通常意味着選項。
這樣才能讓路過操作數發生下手-
是,特殊選項--
可以用來告訴任何實用程序:對待任何後續參數作爲操作數,即使他們看像選項。
由於在這種情況操作數-q
看起來像一個選項,與前述--
它把它標記爲一個操作數是必須的。
至於如何傳遞字符串-q
本身作爲參數:
-q
包含沒有殼元字符,所以殼傳遞給它原樣到cat
- 沒有引用需要的。
引用('-q'
,"-q"
,$'-q'
,\-q
)確實在這種情況下沒有危害,但絕對沒有影響這裏,因爲shell - 應用了任何擴展後 - 只需刪除任何引號字符(一個叫做quote removal的過程),然後把這個詞傳遞給cat
(因爲Charles Duffy在這個問題上的註釋)。
引號是在每個單一情況下,在* cat'可執行文件啓動之前由shell *刪除。因此,它不知道使用了什麼引號(如果有的話)。它們控制shell解析內容的方式,以及shell如何將一個字符串分解成一個參數列表 - 但是對於這裏給出的每一個單引號格式,被調用的系統調用是完全相同的:'execv(「/ usr/bin/cat」 ,{「cat」,「-q」,NUL})'或其等價物。 –
'cat ./- q',順便說一句,會工作。 –