Yanıtlar:
Hata mesajı, ~
Zanna'nın cevabında açıklandığı gibi tilde alıntılandığı için üretilir . Kullanmak istiyorsanız ~
, komut dosyasının ilgili kısmı:
BIN_DIR=~/bin/
Herhangi bir nedenle dizeyi alıntılamak istiyorsanız, ortam değişkenini kullanabilirsiniz $HOME
:
BIN_DIR="$HOME/bin/"
Bence ikinci yaklaşım daha iyi uygulama.
~
Komut dosyalarında kullanmanın yanlış bir yanı yok . komut satırında olduğu gibi çalışır. Sorun şu ki, alıntılama Zanna'nın cevabında açıklandığı gibi tilde genişlemeyi engelliyor .
$HOME
, komut dosyalarında kullanmanın iyi bir fikir olduğu doğrudur .
$HOME
tilde genişletmeyi kullanmaktan daha iyi olduğunu düşündüğünüzü açıklayabilir misiniz ? Verdiğiniz tek açıklama "daha iyi bir fikir, çünkü daha az dikkat etmelisiniz" demek. Bunun ne anlama geldiği hakkında hiçbir fikrim yok. Bir düzenlemede açıklayabilir misiniz? Onsuz, cevabınızı destekleyen hiçbir şey yoktur, bu yüzden kesinlikle ona aittir. Yaklaşık yorumlaması için POSIX tarafından gerekli olmuştur şimdi ise oldukça ve komut dosyasının hashbang çizgidir #!/bin/bash
ben taşınabilirliği neden değildir varsayalım böylece.
~
Çalışmıyor çünkü alıntı yapılıyor. Çift tırnaklar tilde genişletmeyi"
bastırır . Gerçek adı olan bir dizin yok . Açıklandığı gibi (vurgu mayın):~/bin
man bash
Tilde Genişletme
Bir kelime tırnaksız tilde karakteriyle (`~ ') başlarsa, ilk tırnaksız eğik çizgiden önceki tüm karakterler (veya tırnaksız eğik çizgi yoksa tüm karakterler) tilde öneki olarak kabul edilir. Tilde önekindeki karakterlerden hiçbiri alıntılanmazsa, tilde işaretini izleyen tilde önekindeki karakterler olası bir oturum açma adı olarak kabul edilir. Bu oturum açma adı null dizgiyse, tilde işareti HOME parametresinin değeri ile değiştirilir. HOME ayarlanmamışsa, kabuğu çalıştıran kullanıcının giriş dizini onun yerine kullanılır. Aksi takdirde, tilde öneki belirtilen giriş adıyla ilişkili giriş dizini ile değiştirilir.
Tırnak işaretlerini kaldırabilirsiniz , çünkü ~
yoldaki ~/bin
kabuğun bir genişleme gerçekleştirmesine neden olacak tek karakterdir ve bu durumda genişlemeyi istiyoruz. Kabuk gerçekleştirmez , tilde genişlemesi sonucu hakkında başka açılımlar Bash 4 en az Ubuntu tüm güncel veya uzaktan son bültenleri, hangi sahiptir . Yani ana dizininiz boşluk gibi olağandışı karakterler içeriyor olsa bile, sorun değil.
Yoksa kullanabilirsiniz $HOME
yerine ait ~
çünkü parametre genişletme çift tırnak tarafından bastırılmış değil sadece tarafından, tek tırnak . Çift tırnak do böylece genişletilmiş değeri, kendisi başka açılımları tabi olmadığından emin sözcüklere ayırma veya dosya adı genişleme gerçekleşmez. Böylece $HOME
, çift tırnakları sakladığınız sürece, garip olarak adlandırılmış ev dizinleriyle de çalışır.
cd '~'
olduğunu -bash: cd: ~: No such file or directory
.
~
, parametre genişlemesinin bir parçası değildir.