Se você já está familiarizado com bash
, então lidar com padrões de substituição de histórico não é muito mais provável do que manipular quaisquer outros caracteres que sejam especiais para este shell. No entanto, se alguém não estiver familiarizado com o shell ou simplesmente nunca usou seus recursos de substituição de histórico, obviamente será uma surpresa quando aparentemente inócuas seqüências de caracteres sem aspas ou com aspas duplas o acionarem.
Em um shell interativo com substituições de histórico ativadas, o caractere !
é especial praticamente da mesma maneira que o caractere $
é especial, ou seja, em todos os lugares, a menos que seja escapado com \
ou em strings com aspas simples. / p>
Ao contrário de $
through, as substituições de histórico não se expandem aqui-documents, e como elas são orientadas a linha, elas também acontecem em linhas onde a substituição cai dentro de um contexto sem aspas ou um contexto duplo citado (nessa linha quando digitalizado separadamente). Veja este relatório de erros para mais informações .
A substituição de histórico é desativada em shells não-interativos (scripts) porque o recurso de histórico de comandos do shell não é necessário lá, não porque o recurso possui "problemas maiores". Em um script, salvar todos os comandos em $HISTFILE
não faz sentido, e a substituição de histórico também não é algo em que você gostaria de confiar em um script.
Se deve ou não ser ativado por padrão ou não em shells interativos pode ser debatido (embora eu não esteja totalmente convencido de que um debate aqui importaria muito para os desenvolvedores bash
). Você parece pensar que a maioria dos usuários de bash
está tendo problemas com as expansões de histórico, mas nenhum de vocês e eu sabemos como é comum usá-los.
Unix shells permitem modificar o comportamento do shell para atender às necessidades e gostos pessoais. Se você quiser desativar as substituições de histórico de todos os seus shells interativos, continue fazendo o que está fazendo usando set +H
no arquivo ~/.bashrc
ou faça lobby dos desenvolvedores bash
para alterar o padrão (que, acredito, seria chateado e confundir mais pessoas do que ajudaria).