(6 jawaban)
Tutup 3 tahun lalu.
Di unix/linux, sejumlah garis miring ke depan yang berurutan di suatu jalur umumnya setara dengan garis miring ke depan tunggal. mis.
$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
Namun untuk beberapa alasan, dua garis miring ke depan di awal jalur absolut diperlakukan secara khusus. mis.
$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
Jumlah garis miring ke depan lainnya yang berurutan di tempat lain dalam patch akan terpotong, tetapi dua di awal akan tetap ada, bahkan jika Anda kemudian menavigasi di sekitar sistem file relatif terhadapnya.
Kenapa ini? Apakah ada perbedaan antara /… dan //… ?
Jawaban yang Diterima:
Untuk sebagian besar, garis miring berulang di jalur setara dengan garis miring tunggal. Perilaku ini diamanatkan oleh POSIX dan sebagian besar aplikasi mengikutinya. Pengecualiannya adalah bahwa "nama path yang dimulai dengan dua garis miring berturut-turut dapat ditafsirkan dengan cara yang ditentukan implementasi" (tetapi ///foo
setara dengan /foo
).
Kebanyakan unice tidak melakukan sesuatu yang istimewa dengan dua garis miring awal. Linux, khususnya, tidak. Cygwin melakukan://hostname/path
mengakses drive jaringan (SMB).
Apa yang Anda lihat sebenarnya bukanlah Linux yang melakukan sesuatu yang istimewa dengan //
:ini adalah pelacakan direktori bash saat ini. Bandingkan:
$ bash -c 'cd //; pwd'
//
$ bash -c 'cd //; /bin/pwd'
/
Bash mengambil tindakan pencegahan bahwa OS mungkin memperlakukan //
khusus dan menjaganya. Dash melakukan hal yang sama. Ksh dan zsh tidak ketika dijalankan di Linux, saya rasa (saya belum memeriksanya) mereka memiliki pengaturan waktu kompilasi.