(
e )
são caracteres de token especiais na sintaxe de bash
que são usados em vários operadores, incluindo:
-
(...)
subshell construct -
func() compound-command
definiçõ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\""