Saya bertanya-tanya, jika cd saja mengirim saya ke folder rumah saya dan cd ~ melakukan hal yang sama, mengapa ~ ditambahkan di tempat pertama?
Apakah ini sesuatu yang spesifik untuk BASH atau akankah mereka berperilaku berbeda di Shell lain?
cd-command
home
Luis Alvarado
sumber
sumber
cd ~
vscd $HOME
vscd ~not-tandu
. Pertanyaan ini bertanya tentangcd
vscd ~
.Jawaban:
The
~
dapat digunakan untuk lebih dari itu. Perintah apa pun dapat mengambil untung dari memiliki jalan pintas ke folder rumah. Jadi tidak perlu jika Anda ingin cd ke rumah Anda, tetapi bagaimana~/.config
?Kalau tidak, Anda harus menulis jalan rumah, menggunakan
$HOME
var, atau melakukan duacd
s. Juga untuk menyalin atau memindahkan file:Karena sebagian besar file Anda ada di rumah, selalu ada jalan pintas.
sumber
~
adalah yang harus dilakukancd ~user/download
untuk pergi ke direktori unduhan pengguna.Melakukan
cd
pada dasarnya memanggilcd
tanpa argumen dan sesuai dengancd
perilaku "... jika dir tidak diberikan, nilai variabel shell HOME adalah default." (dari manual bash ). Sebaliknya,cd ~
adalah ketika Anda memberikan argumen kecd
perintah, yang kebetulan~
dan shell akan melakukan ekspansi tilde . Sejauh kembali ke direktori home pengguna - tidak ada perbedaan. Dalam kedua kasus,HOME
variabel lingkungan akan ditanyakan:Secara efektif, ini juga tidak memiliki perbedaan
cd $HOME
. Namun, sementaracd
akan melakukan satu-satunya hal, tilde dapat digunakan untuk melakukan ekspansi lain seperti~+
untuk direktori kerja saat ini.Namun, cukup menarik kita bisa
unset HOME
untuk istirahatcd
tetapi~
masih akan bekerja:Mengapa Sekali lagi, jawablah di manual:
Perhatikan bahwa unsetting berbeda dengan membuat variabel kosong
HOME=
dan memang memiliki efek. Dokumentasi secara khusus berbicara tentang variabel unsetting. Membuat variabel sama dengan string kosong memiliki efek yang berlawanan dengan apa yang kita harapkan:Di sini Anda dapat melihat bahwa membuat
HOME
string kosong memecah tilde dancd
perilaku.Tilde dan
$HOME
memiliki sedikit perbedaan dan alasan berbeda untuk keberadaan.$HOME
adalah variabel shell, yang kebetulan juga merupakan salah satu variabel lingkungan - dan tersedia untuk semua program; di C Anda akan menggunakannyaenviron()
untuk mengaksesnya. Sebaliknya,tilde
adalah sintaks khusus shell yang melakukan ekspansi tilde, meskipun Anda dapat menggunakanwordexp()
fungsi untuk melakukan ekspansi mirip shell ( referensi ) di C juga.Alasan mengapa
~
representHOME
telah dijawab dalam pertanyaan ini : pada suatu waktu karakter tilde berbagi kunci yang sama denganHOME
pada terminal Lear-Siegler ADM-3A.HOME
sebaliknya adalah variabel lingkungan yang memiliki makna simbolis murni dan tidak ada representasi fisik.Selain itu, fakta bahwa itu
HOME
adalah variabel lingkungan memungkinkan kita untuk membatalkannya, di mana kita tidak dapat mengatur~
ke sesuatu yang lain melalui cara sederhana.Perhatikan baris kosong di mana pertama
echo
menampilkan variabel yang tidak disetel, dan fakta itu. Sebaliknya, kita tidak dapat melakukan hal-hal seperti ini sampai tilde:Namun, mengubah
HOME
tidak memengaruhi~
:Selain itu, karena
~
juga berfungsi sebagai karakter ekspansi, kita dapat melakukan hal-hal seperti ini untuk menampilkan direktori kerja saat ini:Sedangkan jika kita ingin melakukan itu melalui variabel lingkungan, kita perlu
PWD
, danHOME
tetap sama, atau jika Anda melakukan hal-hal sepertiecho $HOME+
- itu hanya rangkaian string / variabel. Tetapi sekali lagi,~+
keluarkan informasi dari variabel lingkungan:CATATAN : ekspansi
~+
dan~-
bekerjaksh
, tetapi tidak dalamdash
.Untuk menjawab beberapa pertanyaan spesifik Anda:
Tidak, ini harus merupakan perilaku yang konsisten.
ksh
,,dash
dancsh
- semua berperilaku sama dengancd
ataucd ~
.Saya akan mengatakan alasan kenyamanan dan historis seperti yang dijelaskan dalam jawaban terkait tentang tilde. Akhirnya, itu tumbuh untuk melakukan lebih dari ekspansi direktori rumah saja.
sumber
Terlepas dari apakah Anda beberapa level folder di atas atau di bawah
$HOME
, perintahcd
dancd ~
melakukan hal yang sama dan tidak berbeda - itu akan mengirim Anda kembali ke direktori HOME Anda.NAMUN: Ketika Anda 1 atau lebih tingkat folder di atas HOME dan Anda ingin pergi LANGSUNG ke sub-direktori 1 atau lebih tingkat folder di bawah ini
$HOME
, tilde (~
) berguna dengan menyimpan penekanan tombol Anda ketika digunakan untuk mengganti teks yang diperlukan untuk merujuk teks untuk$HOME
saat mengetikcd
perintah. Contohnya;sumber
~ kependekan dari / home / nama pengguna lokasi, sehingga Anda menghemat waktu saat mengetik. Misalnya cd / home / nama pengguna / Downloads sama dengan cd ~ / Downloads, tetapi kurang mengetik. Kedua perintah melakukan hal yang sama, ubah direktori kerja ke lokasi itu.
sumber
root
Direktori rumah Eg biasanya di luar/home