Je veux faire quelque chose comme bzr commit -m "It works!"
. Je peux en quelque sorte échapper au point d'exclamation en faisant bzr commit -m "It works\!"
. Cependant, alors mon message commit inclut le backslash. Comment puis-je échapper au point d'exclamation, tout en ignorant la barre oblique inverse ?
Réponses
Trop de publicités?Voici une autre méthode si vous voulez des guillemets doubles en plus de l'exclamation :
echo "It's broken"'!'
Cela fonctionne même si le !
n'est pas à la fin de la ligne.
Par exemple :
echo "hello there"'!'" and goodbye"
Bonus : Une technique similaire peut être utilisée pour s'échapper tout en Sh ou Bash (avec l'aide de sed) : voir la première option dans cette réponse . En outre, si vous avez bash-completion
installé, vous avez probablement le site quote()
fonction déjà disponibles.
Éteindre expansion de l'histoire :
set +H
ou
set +o histexpand
Vous pouvez ajouter l'une de ces commandes à vos ~/.bashrc
si vous n'utilisez pas habituellement l'expansion de l'histoire.
Bash 4.3 a ajouté un cas particulier :
le caractère d'expansion de l'historique est également traité comme une citation s'il précède immédiatement le guillemet fermant dans une chaîne de caractères à double guillemet.
Je viens de trouver un autre moyen, qui fonctionnera au moins avec echo
Les chaînes de caractères (phrases) que vous voulez ponctuer avec un point d'exclamation. Il contourne, plus ou moins, Bash histexpand et prend seulement un peu plus de temps à coder.
L'hexagone d'un point d'exclamation, tel que listé sur http://www.ascii-code.com/ est de 21, donc si vous mettez \x21
à la fin de votre chaîne, echo -e $foo
, faire $foo
son propre écho étendu [c'est-à-dire foo=$(echo -e "$foo")
], ce que vous obtenez lorsque vous echo $foo
est à nouveau la chaîne avec un !
à la fin. Et pas de commutation histexpand non plus.
Fonctionne à coup sûr dans Bash 4+. Les versions antérieures, ymmv.
- Réponses précédentes
- Plus de réponses