Como você não depende do bash para expandir variáveis em sua mensagem de commit, você pode usar aspas simples. Strings entre aspas simples não são expandidas por bash.
bzr commit -m 'This does work!'
Eu quero fazer algo como bzr commit -m "It works!"
. Eu posso escapar do ponto de exclamação fazendo bzr commit -m "It works\!"
. No entanto, minha mensagem de commit inclui a barra invertida. Como faço para escapar do ponto de exclamação, enquanto ainda ignoro a barra invertida?
Pergunta antiga que conheço, mas para futuros pesquisadores:
Você também pode usar esse método se quiser aspas duplas e a exclamação:
echo "It's broken"'!'
Isso funciona mesmo se o !
não estiver no final da linha.
Por exemplo:
echo "hello there"'!'" and goodbye"
Bônus: Uma técnica similar pode ser usada para escapar de qualquer texto em Sh ou Bash (com a ajuda de sed): veja a primeira opção em esta resposta . Além disso, se você tiver bash-completion
instalado, provavelmente terá a função quote()
já está disponível.
Use aspas simples (') em vez de aspas duplas ("). As aspas simples desligam toda a interpretação das coisas nelas, enquanto as aspas duplas desativam apenas algumas.
bzr commit -m 'It works!'
Acabei de encontrar outra maneira, que pelo menos funcionará com echo
ing strings (frases) que você deseja pontuar com um ponto de exclamação. Faz um final, mais ou menos, em torno do histexpand do Bash e demora apenas um pouco mais para codificar.
O hexadecimal para um ponto de exclamação, conforme listado
O link é 21, então se você colocar \x21
no final da sua string, echo -e $foo
, faça $foo
seu próprio eco expandido [ie, foo=$(echo -e "$foo")
], o que você obtém quando você echo $foo
novamente é a string com um !
no final. E sem trocar histexpand.
Funciona com certeza no Bash 4+. Versões anteriores, ymmv.
Tags bash syntax escape-characters