$HOME
ve ~
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?
$HOME
ve ~
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 $HOME
ve ~
aynı klasörde, geçerli kullanıcının ev klasörüne gelin ama ikisi de çok farklı şeylerdir.
$HOME
bir 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. ~nemo
kullanı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/passwd
LDAP 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 export
ya 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=value
veya set
ya 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 $HOME
aynı 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
$HOME
Tek 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 ~
.
$HOME
ve ~
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.
$HOME
ve nadiren kullanıyor ~
. Eski özüm muhtemelen bunu biliyordu.
~
$ ANA değilken isimli bağımlı kabuk.