Par exemple. je veux dire
perl -e 'print '"'"'Hello, world!'"'"', "\n";'
Y a-t-il une manière moins maladroite de le faire, par exemple en échappant aux guillemets simples?
Oui, je sais que je peux écrire
perl -e 'print q[Hello, world!], "\n"'
perl -e 'print "Hello, world!\n"'
Mais cette question concerne les citations dans le shell, pas dans le Perl.
Je suis intéressé à le faire dans bash
et csh
en premier lieu.
la source
blah <<\EOF … EOF
. Vous pouvez également utiliser<<'EOF'
et<<"EOF
. Ils signifient tous littéralement ici des documents (contrairement à Perl). Si vous étiez vraiment déterminé, vous pourriez le faireblah "$(cat<<\EOF … EOF )" other args
(en utilisant des retours à la ligne où j'ai écrit des espaces dans la substitution de commande; ksh et zsh peuvent se passer du chat , les autres en ont besoin). Mais en vaudrait-il vraiment la peine?echo '\U0000068\U000069'
fait écho à 'hi'. Je ne sais pas pourquoi, sauf si c'est un bug dans le shell.\U
dans ce cas se fait par la commande echo intégrée (ce comportement peut être contrôlé par-E
ou l'option BSD_ECHO et-e
). Vous pouvez voir que la chaîne littérale est passée (et non interprétée autrement) dans d'autres commandes; par exempleprintf %s\\n '\U0000068\U000069'
.Pour moi, tous vos exemples produisent:
Et cela aussi:
Et ça:
Pouvez-vous clarifier ce que vous essayez de faire?
Dans le shell, comme Bash, si vous souhaitez imprimer des guillemets dans le cadre de la chaîne, un type de guillemets échappe à l'autre.
Éditer:
Voici une autre façon:
L'espace après le point d'exclamation évite une erreur d'extension d'historique. J'aurais pu faire à la
set +H
place.la source
Je ne sais pas si ma modification de la réponse précédente apparaîtra:
Coller la même chose qu'une nouvelle réponse:
Approche alternative:
Quand j'ai essayé votre solution, je n'ai toujours pas pu l'imprimer.
Mais je me suis inspiré de votre solution et j'ai essayé ce qui suit:
La valeur ASCII de 'est 39.
J'en avais besoin pour effectuer une modification en ligne d'un tas de fichiers à ajouter «à un endroit d'intérêt.
la source
Ici, le document est le meilleur moyen de ne pas se soucier de s'échapper:
Vous pouvez interdire complètement toute expantion en utilisant le document cité ici:
Si vous voulez le passer comme argument au lieu d'entrée, vous pouvez utiliser xargs:
la source
Je ne sais pas s'il existe une option pour le faire dans bash, mais avec zsh, vous pouvez l'utiliser
''
après avoir activé l'RC_QUOTES
option. (Je recommanderais d'essayer zsh; il est principalement compatible avec bash et peut émuler bash pour encore plus de compatibilité.)Avec bash (et toujours la plupart du temps avec zsh), je l'utilise simplement
'\''
parce qu'il est plus facile à lire que'"'"'
.Je n'ai absolument aucune idée de comment le faire dans csh.
la source
Vous pouvez utiliser \ 'et \ "pour échapper les guillemets avec perl s'ils sont utilisés en interne dans le cadre d'un script perl. Je ne sais pas si la ligne de commande acceptera cela. Vous pouvez l'essayer et voir si cela fonctionne.
la source