( e ) são caracteres de token especiais na sintaxe de bash que são usados em vários operadores, incluindo:
-
(...)subshell construct -
func() compound-commanddefinições de funções -
$(...)substituição de comando -
<(...),>(...)substituição de processo -
((...))construção de avaliação aritmética -
$((...))expansão aritmética -
a=(...),a+=(...)operadores de atribuição de matriz -
@(...),+(...),*(...),?(...)glob operadores (com extglob) -
[[ (a && b) || (c && d) ]]agrupando operadores de expressão condicional -
[[ ... =~ ...(...)... ]]operador regexp.
echo a=(b) é um erro de sintaxe, mas não export a=(b) .
echo a) é um erro de sintaxe, a menos que tenha havido uma abertura ( nas linhas anteriores parte de uma das construções acima.
Embora seja possível escrever um gancho readline que adicione aspas onde necessário em torno de ( , ) para evitar um erro de sintaxe, seria um esforço considerável, pois significaria fazer uma análise completa da sintaxe do shell.
Uma abordagem melhor pode ser usar um atalho que cite a palavra atual quando você percebe tarde demais que contém caracteres especiais para o shell.
Com zsh (assumindo o modo emacs ):
bindkey -s '\e#' '\C@\eb\Cx\Cx\e"'
Para que Alt + # apresente a palavra .
Ou uma aproximação com bash (também assumindo emacs mode):
bind "\"\e#\": \"'\e \eb'\C-X\C-X\""