Perintah Bash
cd -
mencetak direktori yang sebelumnya digunakan dan mengubahnya.
Di sisi lain, perintah Bash
cd ~-
langsung berubah ke direktori yang sebelumnya digunakan, tanpa menggema apa pun.
Apakah itu satu-satunya perbedaan? Apa kasus penggunaan untuk masing-masing perintah?
bash
directory
cd-command
pushd
dr01
sumber
sumber
cd ~-
.Jawaban:
Ada dua hal yang berperan di sini. Pertama,
-
sendiri diperluas ke direktori Anda sebelumnya. Ini dijelaskan dicd
bagianman bash
(penekanan milikku):Jadi, sederhana
cd -
akan memindahkan Anda kembali ke direktori sebelumnya dan mencetak nama direktori. Perintah lain didokumentasikan di bagian "Ekspansi Tilde":Ini mungkin lebih mudah dipahami dengan contoh:
Jadi, secara umum,
-
berarti "direktori sebelumnya". Itu sebabnyacd -
dengan sendirinya akan memindahkan Anda kembali ke mana pun Anda berada.Perbedaan utama adalah yang
cd -
spesifik untukcd
builtin. Jika Anda mencobanyaecho -
hanya akan mencetak a-
. Ini~-
adalah bagian dari fungsi ekspansi tilde dan berperilaku mirip dengan variabel. Itu sebabnya Anda bisaecho ~-
dan mendapatkan sesuatu yang bermakna. Anda juga bisa menggunakannyacd ~-
tetapi Anda bisa menggunakannya di perintah lain. Misalnyacp ~-/* .
yang setara dengancp "$OLDPWD"/* .
sumber
set -x
untuk mencetak perintah yang diperluas sebelum menjalankannya mungkin berguna untuk menggambarkan perbedaannya (atau mungkin hanya berisik yang tidak dapat dibaca ketika Anda tidak melakukannya sendiri satu langkah pada satu waktu).cd ~-/..
bekerja,cd -/..
tidak!~-
tunduk pada ekspansi tilde (lihat man bash), jadi yangcd
dilihat adalah nama direktori sebelumnya secara langsung.-
tidak diperluas oleh shell,cd
melihatnya secara langsung, dan berperilaku seperti yang didokumentasikan:sumber
TL; DR:
cd -
sudah ada di dalamcd
,~-
merupakan ekstensi nanti~[name]
, tidak khusus untukcd
.POSIX.1-2008 Shell & Utilities mendefinisikan
cd -
sebagai kasus khusus yang spesifik untukcd
perintah :The
~-
ekstensi akan diperluas ke$OLDPWD
sebelum perintah apapun dijalankan dan dapat dilewatkan sebagai argumen untuk perintah apapun, bukan hanyacd
. Ini adalah ekstensi nanti dalam ksh dan bash .Standar Shell & Utilities POSIX.1-2008 tersebut di atas juga memiliki penjelasan terperinci tentang Ekspansi Tilde . Kata-katanya sangat spesifik untuk memungkinkan
~-
perilaku yang tidak terdefinisi dalam lingkup standar, di mana~[name]
mengacu pada$HOME
apakah[name]
string kosong, atau direktori home penggunaname
jikaname
adalah nama pengguna yang valid.sumber