Comment ignorer l'évaluation de l'esperluette en ligne de commande?

13

Lorsque vous saisissez une URL Google Maps Directions dans la ligne de commande (pour l'ouverture avec un navigateur Chrome via Terminal), il y a une esperluette ( &) dans l'URL, mais le terminal la casse à cause du contenu Unix étant du contenu Unix. Y a-t-il quelque chose que je peux taper dans le terminal qui, lorsque la commande passera réellement, sera traitée comme une esperluette?

Will; amp; travail?

Leron
la source

Réponses:

15

Vous devez mettre l'adresse entre guillemets:

chromium-browser 'http://whatever.com/?x=1&y=2'
htorque
la source
D'accord, j'avais la citation à la fin, mais pas celle d'avance ... qui l'explique. Je vous remercie.
Leron
7

Les citations vont résoudre ce problème, mais vous pouvez également échapper aux choses avec une barre oblique inverse:

echo http://whatever.com/?x=1\&y=2

Ne pas dire que c'est mieux, en aucun cas, c'est juste une autre option pour des situations comme celle-ci.

Oli
la source
1

Cela n'aura pas vraiment d'importance dans ce cas, mais il y a une différence entre les guillemets simples et les guillemets doubles.

Les guillemets doubles remplacent les caractères spéciaux tels que «$» et les guillemets, tandis que les guillemets simples traitent tout littéralement, à l'exception du guillemet simple de fermeture.

Les deux regrouperont le texte, ce qui oblige le chrome à le traiter comme un seul argument, et les caractères comme "; # &" n'ont aucune signification particulière dans ce contexte.

Cela montre l'utilisation de '\' pour échapper à un guillemet double entre guillemets doubles et une barre oblique inverse elle-même:

mat@sen:~$ echo "a&bc\\#de\"f"
a&bc\#de"f

Avec des guillemets simples, rien ne change:

mat@sen:~$ echo 'a&bc\\#de\"f'
a&bc\\#de\"f

Sans les guillemets, le «&» le divise en deux commandes:

mat@sen:~$ echo a&bc\\#de\"f
[1] 2619
a
bc\#de"f: command not found
[1]+  Done                    echo a
[1]+  Done                    echo a

Habituellement, lorsque vous traitez un type de devis, vous pouvez simplement l'envelopper dans l'autre type, mais vous pouvez rencontrer des problèmes avec ceci:

mat@sen:~$ echo "'a'bc$foo"
'a'bc

Les guillemets simples ne sont pas substitués, mais le «$» l'est. La syntaxe suivante fonctionne cependant:

mat@sen:~$ echo $'a\'bc$foo'
a'bc$foo
Tapis
la source