Você precisa ativar extglob
.
Suponha que tenhamos três diretórios:
$ ls -d */
current/ future/ past/
Sem glob estendido, o seguinte não é entendido:
$ echo !(current)
bash: syntax error near unexpected token '('
Se habilitarmos extglob
, entendido:
$ shopt -s extglob
$ echo !(current)
future past
Isso corresponde com sucesso a todos os arquivos exceto current
.
Observe que o ponto de exclamação, !
, é um caractere bash-ativo. Pode invocar a expansão de histórico que, se falhar, resulta no erro que você observou. Se você não estiver usando a expansão de histórico, convém desativá-lo: set +H
.