Ada dua hal yang berperan di sini. Pertama, -
sendiri diperluas ke direktori Anda sebelumnya. Ini dijelaskan di cd
bagian man bash
(penekanan milikku):
Argumen dari -
dikonversi ke $ OLDPWD sebelum perubahan direktori dicoba. Jika nama direktori non-kosong dari CDPATH digunakan, atau jika -
argumen pertama, dan perubahan direktori berhasil, nama path absolut dari direktori kerja baru ditulis ke output standar. Nilai kembali benar jika direktori berhasil diubah; salah kalau tidak.
Jadi, sederhana cd -
akan memindahkan Anda kembali ke direktori sebelumnya dan mencetak nama direktori. Perintah lain didokumentasikan di bagian "Ekspansi Tilde":
Jika awalan tilde adalah ~+
, nilai dari variabel shell PWD menggantikan awalan tilde. Jika tilde-prefix adalah a ~-
, nilai variabel shell OLDPWD, jika diset, diganti. Jika karakter yang mengikuti tilde dalam awalan tilde terdiri dari angka N, secara opsional diawali oleh a +
atau a -
, awalan tilde digantikan dengan elemen yang sesuai dari tumpukan direktori, karena akan ditampilkan oleh dirs builtin dipanggil dengan awalan tilde sebagai argumen. Jika karakter mengikuti tilde dalam awalan tilde terdiri dari angka tanpa memimpin +
atau -
, +
diasumsikan.
Ini mungkin lebih mudah dipahami dengan contoh:
$ pwd
/home/terdon
$ cd ~/foo
$ pwd
/home/terdon/foo
$ cd /etc
$ pwd
/etc
$ echo ~ ## prints $HOME
/home/terdon
$ echo ~+ ## prints $PWD
/etc
$ echo ~- ## prints $OLDPWD
/home/terdon/foo
Jadi, secara umum, -
berarti "direktori sebelumnya". Itu sebabnya cd -
dengan sendirinya akan memindahkan Anda kembali ke mana pun Anda berada.
Perbedaan utama adalah yang cd -
spesifik untuk cd
builtin. Jika Anda mencobanya echo -
hanya akan mencetak a -
. Ini ~-
adalah bagian dari fungsi ekspansi tilde dan berperilaku mirip dengan variabel. Itu sebabnya Anda bisa echo ~-
dan mendapatkan sesuatu yang bermakna. Anda juga bisa menggunakannya cd ~-
tetapi Anda bisa menggunakannya di perintah lain. Misalnya cp ~-/* .
yang setara dengancp "$OLDPWD"/* .
cd ~-
.