$HOMEve ~genellikle aynı şeyi ifade eder. Yani, bunlar "/ home / userName" genel formundaki "home" dizinine giden yoldur.
Ne zaman, eğer öyleyse, bunlar aynı dizine gönderme yapmıyor mu?
$HOMEve ~genellikle aynı şeyi ifade eder. Yani, bunlar "/ home / userName" genel formundaki "home" dizinine giden yoldur.
Ne zaman, eğer öyleyse, bunlar aynı dizine gönderme yapmıyor mu?
Yanıtlar:
Hem $HOMEve ~aynı klasörde, geçerli kullanıcının ev klasörüne gelin ama ikisi de çok farklı şeylerdir.
$HOMEbir ortam değişkenigeçerli kullanıcının ana klasörünü içerecek şekilde ayarlanmış .~bir kabuk genleşme sembolüdür , yani, gerçek komut gerçekleştirilmeden önce işlenen sembollerden biridir. ~tek başına $ HOME değerine genişler. ~nemokullanıcının giriş dizinine genişler nemo. Bir kabuk genişletme sembolü, gerçek komutu oluşturmak için kabuk tarafından işlenen / yorumlanan bir karakterdir (veya bir çift karakter). *Dosya adlarını genişletmek için kullanılan kabuk genişletme sembolünün bir başka örneği .~Windows'ta $ HOME veya% APPDATA% olarak genişler. Tanımlanmamışlarsa, "şifre veritabanı" ndaki yolu arayacaktır (bu genellikle /etc/passwdLDAP veya başka bir veri kaynağı olabilir). Yaklaşık 20 yıl önce, $ HOME'un bazı makinelere kurulmayacağı, ancak bir ~şeylere genişletilmesi garanti edildiğine dair uyarılmış olabilirsiniz .
~genişler . Ve cmd.exe üzerinde genişlemez. $HOME$HOMEPATH$APPDATA~
HOME(bir işletim sistemi kavramı, bir ortam değişkendir sh ile, örneğin set kabuğu exportya da declare -x) değil, tamamen kabuk bağlıdır tanımı olan bir kabuk değişkeni (ama içinde sh kabukları genellikle ayarlanır foo=valueveya setya da birkaç diğer yolları).
Farklı olmalarının bir yolu, Bash kabuğunun içine alındığında onları nasıl dönüştürdüğüdür. " tırnak işareti .
Eğer kullanırsanız echo, daha sonra herhangi bir tırnak işaretleri olmadan, böyle ~ve $HOMEaynı etkiye sahiptir:
$ echo ~
/home/elias
$ echo $HOME
/home/elias
Bununla birlikte, "etraflarındaki tırnak işaretleri ile sonuç farklılık gösterir:
$ echo "~"
~
$ echo "$HOME"
/home/elias
~yalnızca, tanımı gereği kelimenin başlangıcında başlaması gereken bir tilde öneki parçası olarak genişler . Ek olarak, bir zamanlar küreselleşme kalıplarının bir parçası olduğundan, ~çift tırnak içinde çalışmayacaktır. Yani, "~"veyaa~b bir edebi değeri ile sonuçlanacaktır ~korunmuştur.
Biri ~(veya ~ardından a /), mevcut kullanıcının evine genişler:
$ echo ~/.ssh
/home/user/.ssh
Bir ~kullanıcı adı tarafından takip edilen o kullanıcının ana klasörüne genişler:
$ echo ~root/.ssh
/root/.ssh
A veya a ve ~ardından isteğe bağlı bir sayı, dizin yığınının öğelerine genişler :+-
$ cd /etc
$ echo ~+0
/etc
$HOMETek bir eşdeğeridir ~, bunun yerine değişkenler için sözdizimi kurallarını izler. Örneğin, çift tırnak içinde genişler, ayarlanamaz ve dize işleme işlenenleri uygulanabilir.
Bu, genişlemenin ne olduğuna çok bağlıdır. Kısaca, ~dosya dizini genişletmesini veya kelime ayrılmamasına rağmen kelime bölmesini tetiklemeden ana dizini almanın uygun bir yoludur. Örneğin:
$ HOME='/*'
$ echo $HOME
/bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
$ echo ~
/*
Veya:
$ HOME='/ a b'
$ printf "|%s|\n" $HOME ~
|/|
|a|
|b|
|/ a b|
Bu nedenle, bazı nedenlerden dolayı alıntılarla güreşiyorsanız (bu durumda her şeyi gerçekten yeniden düşünmelisiniz, domuz güreşi yapmak daha kolaydır), ~daha uygun olabilir.
Başka yerlerde, örneğin Python'da ~ve farklı işlevlerle$HOME genişletilmesi gerekiyor . Diğer bazı yerler değişkenlere izin verir ve joker karakterler veya tilde genişlemesi gibi diğer kabuk sözdizimlerine izin vermez (ör . Değişken genişlemesi için özel bir sözdizimi vardır). Yine de diğer yerler, bir istisna olarak tilde genişlemesine izin veriyor (örneğin, systemd ), ancak passwd veritabanını kullanmak yerine doğrudan sorgula . ~/.pam_environment$HOME
$HOME, ancak değerini (doğrudan) değiştiremezsiniz ~.
$HOMEve ~normalde varsayılan olarak yapmak - - aynı kapıya ilgili değildir ve sonra ortam değişkeni kasten atama onları aynı şey atıfta yapmak. Bu iyi bir gösteri ancak gereksiz yere kafa karıştırıcı.
$ HOME / standart POSIX.2'de çalışma olasılığı daha yüksektir çünkü Bourne / bin / sh, tilde genişlemesi BSD csh tcsh GNU bash ve diğerlerinde bulunan bir uzantıdır.
Meşgul kutusuna veya kısa çizgi veya BSD sh'a taşınabilir komut dosyaları yazmak istiyorsanız, ~ / ile çarpmanızın gerekebileceği fazladan harflere yatırım yapın: Belirli sistemlerde böyle bir dosya veya dizin yok.
Ayrıca $ HOME / daha okunabilir buluyorum.
$HOMEve nadiren kullanıyor ~. Eski özüm muhtemelen bunu biliyordu.
~$ ANA değilken isimli bağımlı kabuk.