Bagaimana cara melewati evaluasi ampersand di baris perintah?

13

Saat memasukkan URL Google Maps Directions ke dalam baris perintah (untuk membuka dengan browser kromium melalui Terminal) ada ampersand ( &) di URL, namun terminal memecahnya di sana karena barang Unix menjadi barang Unix. Apakah ada sesuatu yang bisa saya ketik di terminal bahwa ketika perintah benar-benar melewati, itu akan diperlakukan seperti ampersand?

Will; amp; kerja?

Leron
sumber

Jawaban:

15

Anda harus memasukkan alamat dalam tanda kutip:

chromium-browser 'http://whatever.com/?x=1&y=2'
htorque
sumber
Oke, saya punya kutipan di akhir, tapi bukan yang di depan ... yang menjelaskannya. Terima kasih.
Leron
7

Kutipan akan memperbaikinya tetapi Anda juga dapat menghindari hal-hal dengan back-slash:

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

Tidak mengatakan ini lebih baik, dengan cara apa pun, itu hanyalah pilihan lain untuk situasi seperti ini.

Oli
sumber
1

Sebenarnya tidak masalah dalam hal ini, tetapi ada perbedaan antara tanda kutip tunggal dan tanda kutip ganda.

Kutipan ganda akan menggantikan karakter khusus seperti '$' dan tanda kutip, sedangkan tanda kutip tunggal memperlakukan semuanya secara harfiah, kecuali untuk kutipan tunggal penutup.

Keduanya akan mengelompokkan teks bersama, yang menyebabkan chromium memperlakukannya sebagai argumen tunggal, dan karakter seperti "; # &" tidak memiliki arti khusus dalam konteks itu.

Ini menunjukkan penggunaan '\' untuk menghindari kutip ganda dalam tanda kutip ganda, dan garis miring terbalik itu sendiri:

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

Dengan tanda kutip tunggal tidak ada perubahan:

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

Tanpa tanda kutip, tanda '&' membaginya menjadi dua perintah:

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

Biasanya ketika berhadapan dengan satu jenis penawaran, Anda dapat membungkusnya dengan jenis yang lain, tetapi Anda mungkin mengalami masalah dengan ini:

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

Kutipan tunggal tidak diganti, tetapi '$' adalah. Sintaks berikut bekerja:

mat@sen:~$ echo $'a\'bc$foo'
a'bc$foo
Tikar
sumber