Untuk beberapa alasan aneh, saya mencoba "'" sebagai pemisah kata dalam pengidentifikasi, seperti pada:
$ export foo'bar=1
>
> ^C
$
Hasilnya adalah seperti yang ditunjukkan di atas, id perubahan prompt untuk ">" dan sistem jelas menunggu informasi lebih lanjut di bagian saya. Seperti yang Anda lihat, saya harus ctrl-C untuk melarikan diri. Hal yang sama terjadi dengan menggunakan perintah lain seperti
$ ls foo'bar
$ mkdir foo'bar
Saya ingin tahu tentang arti semua ini, itulah makna khusus yang dimiliki "" pada perintah terminal (begitu spesialnya sehingga terpisah bahkan di dalam id).
Tambahan: Selain itu saya juga ingin mengetahui sekumpulan karakter khusus atau tidak valid dalam nama file dan folder, baik di bawah Unix-like dan sistem Windows (untuk mendapatkan subset umum yang aman) (khususnya, bagaimana dengan semua non-ASCII?).
Terima kasih, Denis
sumber
Jawaban:
Karakter 'adalah karakter yang sangat kuat setiap kali digunakan dalam perintah shell. Pada dasarnya '(tanda apostrof) menonaktifkan semua jenis transformasi atau modifikasi. Itu akan mempertimbangkan apa pun yang tertutup dengan tanda 'sebagai entitas tunggal yaitu parameter tunggal. Sama sekali tidak ada substitusi atau ekspansi yang akan terjadi.
Contoh:
akan menghasilkan pada output string
$HOME
itu sendiri dan tidak akan mencetak path ke direktori home Anda. Karena tanda kutip tunggal mencegah segala jenis ekspansi, substitusi dan pertimbangan sederhana menganggap apa pun yang akan hadir sebagai parameter sederhana.Jika Anda ingin menggunakan tanda kutip seperti apa adanya, Anda harus menghindarinya:
Jika tidak lolos, itu akan menunggu pasangannya ditutup, seperti yang terjadi pada contoh pertama Anda.
Jadi, dikoreksi, perintah Anda adalah:
CATATAN: Seperti yang dicatat Milan Todorovic, ini tidak akan berlaku, karena Anda tidak dapat menggunakan tanda kutip dalam hal ini.
sumber
Karakter
'
adalah karakter khusus. Anda menggunakannya untuk menandai bagian dari entri baris perintah yang tidak akan diubah (mis. Tidak ada penggantian untuk wildcard). Sebagai contoh:Ini berarti bahwa argumen untuk
ls
adalahbla*
dan bukan semua yang dimulai denganbla
.Alasan mengapa Anda mendapatkan
>
karakter adalah karena Anda harus menggunakan satu'
untuk membuka dan satu'
untuk menutup bagian yang tidak akan diubah.Jika Anda ingin menggunakan
'
dalam nama folder Anda harus melarikan diri seperti ini:\'
. Jadi, jika Anda ingin daftar folder bernamafoo'bar
Anda harus mengetikls foo\'bar
.Oh, dan saya tidak yakin apakah mungkin untuk menggunakan
'
nama variabel lingkungan. Saya pikir Anda tidak dapat menggunakanexport foo\'bar=1
,Semoga ini membantu.
sumber