Ne zsh, bash avoir des devis qui sont pratiques pour le texte en anglais?
Si j'utilise des guillemets simples, des mots avec des apostrophes ("ne") sont ennuyeux à s'échapper:
'Don'"'"'t do that'
Si j'utilise des guillemets doubles, le signe du dollar et des points d'exclamation voyage jusqu':
"It cost like \$1000\!"
Est-il une autre sorte de citer je peux utiliser?
modifier: je dois aussi ajouter que je voudrais faire passer cette chaîne directement comme argument de ligne de commande, plutôt que de le stocker dans une variable. À cette fin, j'ai essayé, à l'aide de DigitalRoss la solution de
$ echo "$(cat << \EOF
Don't $worry be "happy".
EOF)"
mais obtenir
dquote cmdsubst>
après en appuyant sur entrée :/. Donc, à ce moment ZyX la suggestion de setopt rcquotes
semble être la plus pratique.
- la dernière
EOF
doit être sur une ligne par lui-même, pas les autres personnages. Mettre la fin de parenthèse sur la ligne suivante. - J'obtiens le même résultat.
- Hmm, la coque est en attente pour la simple citation d'être respectée.
Vous devez vous connecter pour publier un commentaire.
Avec zsh vous pouvez faire
. Puis ASCII apostrophes sont échappés comme cela:
. Ou l'installation de votre clavier pour pouvoir entrer en UTF apostrophes, ils n'ont pas de problèmes avec n'importe quel type de guillemets (y compris aucune) dans n'importe quel environnement:
. Troisième travaille à la fois pour zsh, bash, et:
.
Ni les premières, ni les tiers permettent d'affiner le devis d'un seul caractère, mais ils sont encore moins verbeux pour les non-longues chaînes ensuite heredocs suggéré ci-dessus. Avec zsh vous pouvez le faire en utilisant personnalisé accepter de ligne de widget qui va remplacer des constructions comme les
'Don't'
avec'Don'\''t'
. Nécessite plutôt délicate regex magie que je peux écrire qu'en perl; il n'est probablement pas la meilleure idée que je ne peux pas faire semblant je peut couvrir tous les cas possibles avant qu'ils ont frappé. Il ne sera pas, en tout cas, toucher tous les scripts.J'aime la direction Zsolt Botykai va. Voici un exemple qui fonctionne avec n'importe quel shell Posix. (J'ai aussi vérifié qu'il a survécu à sa pâte dans le serveur.)
Les choses qui font de ce travail;
-r
fera\
pas de la magie\EOF
au lieu de simplementEOF
fait$
pas de la magie$IFS
, attaque et de fuite des blancs sera dépouillé. Aussi, il ne fonctionne que pour une seule ligne de texte.'EOF'
, il a pour effet de unique en citant le texte:read -r x << 'EOF'
Si vous souhaitez attribuer une citation du texte à une variable, vous pouvez toujours utiliser heredocs, comme (et peut être un texte multiligne trop):
Bash syntaxe
$'string'
est un autre citant le mécanisme qui permet à la norme ANSI C-comme les séquences d'échappement et de faire de l'expansion à une seule cité de la version.Voir https://stackoverflow.com/a/16605140/149221 pour plus de détails.