Wie überspringe ich die Bewertung von kaufmännischem Und in der Befehlszeile?

13

Bei der Eingabe einer Google Maps Directions-URL in die Befehlszeile (zum Öffnen mit dem Chromium-Browser über das Terminal) befindet sich ein kaufmännisches Und ( &) in der URL. Das Terminal unterbricht die Eingabe jedoch, da Unix-Inhalte Unix-Inhalte sind. Kann ich etwas in das Terminal eingeben, das, wenn der Befehl tatsächlich ausgeführt wird, wie ein kaufmännisches Und behandelt wird?

Will; amp; Arbeit?

Leron
quelle

Antworten:

15

Sie müssen die Adresse in Anführungszeichen setzen:

chromium-browser 'http://whatever.com/?x=1&y=2'
Drehmoment
quelle
Okay, ich hatte das Zitat am Ende, aber nicht das erste ... das erklärt es. Vielen Dank.
Leron
7

Zitate werden das beheben, aber Sie können die Dinge auch mit einem Back-Slash umgehen:

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

Nicht zu sagen, dass dies auf jeden Fall besser ist, ist nur eine weitere Option für Situationen wie diese.

Oli
quelle
1

In diesem Fall spielt es eigentlich keine Rolle, aber es gibt einen Unterschied zwischen einfachen und doppelten Anführungszeichen.

Doppelte Anführungszeichen ersetzen Sonderzeichen wie '$' und Anführungszeichen, während einfache Anführungszeichen bis auf das schließende einfache Anführungszeichen alles buchstäblich behandeln.

Beide gruppieren den Text, wodurch Chrom ihn als einzelnes Argument behandelt, und Zeichen wie "; # &" haben in diesem Kontext keine besondere Bedeutung.

Dies zeigt die Verwendung von '\', um ein doppeltes Anführungszeichen in doppelten Anführungszeichen und einen Backslash selbst zu umgehen:

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

Mit einfachen Anführungszeichen ändert sich nichts:

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

Ohne die Anführungszeichen teilt das '&' es in zwei Befehle:

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

Wenn Sie mit einer Art von Zitat arbeiten, können Sie es normalerweise in die andere Art einwickeln, aber dies kann zu Problemen führen:

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

Die einfachen Anführungszeichen werden nicht ersetzt, das '$' jedoch. Die folgende Syntax funktioniert jedoch:

mat@sen:~$ echo $'a\'bc$foo'
a'bc$foo
Matte
quelle