Bash
Bash:允許在命令參數中使用括號(即防止“意外令牌’(’”)
我經常使用我提供的命令行程序,該程序帶有包含括號的參數。為簡單起見,假設我在寫
echo 'bar(1,3)'
我想省略引號。但是,如果我這樣做,我會得到
syntax errror near unexpected token '('
. 我想這與子shell有關。如果這是唯一的方法,我願意禁用這些。(儘管如果 subshell 不在命令的開頭,則無法啟動它,因此據我所知,它們沒有理由禁止在參數中使用括號)
(
並且)
是語法中的特殊標記字元,bash
用於許多運算符,包括:
(...)
子殼結構func() compound-command
函式定義$(...)
命令替換<(...)
,>(...)
過程替換((...))
算術評估結構$((...))
算術展開a=(...)
,a+=(...)
數組賦值運算符@(...)
,+(...)
,*(...)
,?(...)
glob 運算符(使用 extglob)[[ (a && b) || (c && d) ]]
分組條件表達式運算符[[ ... =~ ...(...)... ]]
正則表達式運算符。
echo a=(b)
是語法錯誤,但不是export a=(b)
.
echo a)
是語法錯誤,除非(
在上述結構之一的前幾行中有一個開口。雖然可以編寫一個 readline 掛鉤,在需要的地方添加引號
(
,)
以避免語法錯誤,但這將是相當大的努力,因為這意味著對 shell 語法進行完整的解析。更好的方法可能是在您意識到它包含 shell 特殊字元時為時已晚使用引用目前單詞的快捷方式。
使用
zsh
(假設emacs
模式):bindkey -s '\e#' '\C@\eb\Cx\Cx\e"'
引用
Alt+#
目前單詞。或近似值
bash
(也假設emacs
模式):bind "\"\e#\": \"'\e \eb'\C-X\C-X\""