Jak pominąć ocenę ampersand w wierszu poleceń?

14

Podczas wpisywania adresu URL Kierunków Google Maps w wierszu polecenia (do otwierania w przeglądarce Chrome za pomocą terminala &) w adresie URL znajduje się znak „ampersand” , jednak terminal go tam łamie, ponieważ uniksowe rzeczy są uniksowe. Czy jest coś, co mogę wpisać w terminalu, co gdy polecenie faktycznie przejdzie, będzie traktowane jak znak handlowego?

Will; amp; praca?

Leron
źródło

Odpowiedzi:

16

Musisz podać adres w cudzysłowie:

chromium-browser 'http://whatever.com/?x=1&y=2'
htorque
źródło
Okej, miałem na końcu cytat, ale nie ten z przodu ... to wyjaśnia. Dziękuję Ci.
Leron
7

Cytuje to naprawią, ale możesz też uciec przed ukośnikiem:

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

Nie twierdząc, że jest to lepsze, w każdym razie jest to kolejna opcja dla takich sytuacji.

Oli
źródło
1

W tym przypadku tak naprawdę nie będzie to miało znaczenia, ale istnieje różnica między pojedynczymi cudzysłowami i podwójnymi cudzysłowami.

Podwójne cudzysłowy zastąpią znaki specjalne, takie jak „$” i cudzysłowy, podczas gdy pojedyncze cudzysłowy traktują wszystko dosłownie, z wyjątkiem zamykającego pojedynczego cudzysłowu.

Oba zgrupują tekst razem, co powoduje, że chrom traktuje go jako pojedynczy argument, a znaki takie jak „; # &” nie mają specjalnego znaczenia w tym kontekście.

To pokazuje użycie „\” do uniknięcia podwójnego cudzysłowu w podwójnych cudzysłowach i samego odwrotnego ukośnika:

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

W przypadku pojedynczych cytatów nic się nie zmienia:

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

Bez cudzysłowu znak „&” dzieli go na dwa polecenia:

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

Zwykle, mając do czynienia z jednym rodzajem cytatu, możesz po prostu zawinąć go w inny typ, ale możesz mieć z tym problemy:

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

Pojedyncze cudzysłowy nie są zastępowane, ale „$” jest. Działa jednak następująca składnia:

mat@sen:~$ echo $'a\'bc$foo'
a'bc$foo
Mata
źródło