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?

Antworten:


15

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

chromium-browser 'http://whatever.com/?x=1&y=2'

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.