我想寫一小段代碼將一個小公式傳遞給另一個程序,但是我發現公式啓動時發生了一些奇怪的事情與11 *(:11 *(...)作爲bash參數不帶引號
$ echo 11*15
整齊打印'11 * 15'
$ echo 21*(15)
整齊打印'21 *(15)」,而
echo 11*(15)
只給出'11'。至於我發現這隻發生在'11 *('。我知道這可以通過使用適當的引號來解決,但我仍然好奇爲什麼會發生這種情況。
有誰知道嗎?
我想寫一小段代碼將一個小公式傳遞給另一個程序,但是我發現公式啓動時發生了一些奇怪的事情與11 *(:11 *(...)作爲bash參數不帶引號
$ echo 11*15
整齊打印'11 * 15'
$ echo 21*(15)
整齊打印'21 *(15)」,而
echo 11*(15)
只給出'11'。至於我發現這隻發生在'11 *('。我知道這可以通過使用適當的引號來解決,但我仍然好奇爲什麼會發生這種情況。
有誰知道嗎?
你的程序是如何編碼的?如果它的編碼採取的參數,然後通過你的公式一樣
./myprogram "11*15"
或
echo '11*15' | myprogram
如果回聲,就像在命令行上,你可以無意中顯示文件名中有11
的文件
11*(15)
使用特定於Bash的擴展glob語法。你偶然發現了它,強調爲什麼引號是一個好主意。 (我也學到了不少追查爲什麼它爲我工作不同。感謝那個)
echo 11*(15)
在bash會根據extglob
是否啓用改變的行爲。如果啓用*(PATTERN-LIST)
匹配零次或多次出現的模式。如果它被禁用,它不會,並且由此產生的(
可能會導致語法錯誤。
例如:
$ ls
11 115 1155 11555 115555
$ shopt -u extglob
$ echo 11*(55)
bash: syntax error near unexpected token `('
$ shopt -s extglob
$ echo 11*(55)
11 1155 115555
$
(這解釋奇數行爲我在註釋中所討論的。)
從在bash 4.2.8文檔(info bash
)報價:
如果`extglob'shell選項使用`shopt'內建來啓用, 幾個擴展模式匹配操作符被識別。在以下描述中的 中,PATTERN-LIST是由`|'分隔的一個或多個 模式的列表。使用 一個或多個以下子圖案可以形成複合圖案:
'?(圖案列表)' 匹配給定圖案的零次或一次出現。
`*(PATTERN-LIST)' 匹配零個或多個出現的給定模式。
`+(模式列表)' 匹配一個或多個出現的給定模式。
`@(PATTERN-LIST)' 匹配給定模式之一。
`!(PATTERN-LIST)' 匹配除給定模式之外的任何內容。
你有一個叫做11的文件嗎? – Joshua
一個名爲'11'的文件不能解釋這種行爲 - 事實上我想不出任何會發生什麼。我得到了'bash:附近的意外標記附近的語法錯誤'(''。 –
'echo 11 *'print什麼? –