Not: POSIX uyumlu bir çözüm için bu yanıta bakın .
${BASH_SOURCE[0]}(veya, daha basit olarak, $BASH_SOURCE[1]
), tüm çağrı senaryolarında, özellikle de komut dosyası kaynaklandığında içeren komut dosyasının (potansiyel olarak göreceli) yolunu içerir , ki bu doğru değildir $0.
Ayrıca, Charles Duffy'nin de işaret ettiği gibi, arayan tarafından keyfi bir değere $0ayarlanabilir .
Kapak tarafında, isimlendirilmiş dosya yoksa boş olabilir ; Örneğin:
$BASH_SOURCE
echo 'echo "[$BASH_SOURCE]"' | bash
Aşağıdaki örnek bunu göstermektedir:
Senaryo foo:
#!/bin/bash
echo "[$0] vs. [${BASH_SOURCE[0]}]"
$ bash ./foo
[./foo] vs. [./foo]
$ ./foo
[./foo] vs. [./foo]
$ . ./foo
[bash] vs. [./foo]
$0POSIX kabuk belirtiminin bir parçasıdır, oysa BASH_SOURCEadından da anlaşılacağı gibi Bash'e özgüdür.
[1] İsteğe bağlı okuma: ${BASH_SOURCE[0]}ile$BASH_SOURCE :
Bash, skaler gösterimi kullanarak 0bir dizi değişkeninin öğesine başvurmanıza izin verir : yazmak yerine yazabilirsiniz ; başka bir deyişle: değişkene bir skaler gibi başvurursanız , indekste öğeyi alırsınız . ${arr[0]}$arr0
Bu özelliği kullanmak $arr, bir dizi olduğu gerçeğini gizler , bu nedenle popüler kabuk kodu linter shellcheck.net aşağıdaki uyarıyı verir (bu yazı itibariyle):
SC2128: Bir diziyi indeks olmadan genişletmek yalnızca ilk öğeyi verir.
Bir yan not: Bu uyarı yararlı olsa da, daha kesin olabilir, çünkü ilk öğeyi almanız gerekmeyecektir : Özellikle 0döndürülen, dizindeki öğedir , bu nedenle ilk öğenin daha yüksek bir dizini varsa - ki Bash'de mümkündür - boş dizgeyi alırsınız; deneyin 'a[1]='hi'; echo "$a"'.
(Buna karşılık, zshher zamankinden dönek gerçekten yapar , indeksinin bakılmaksızın, ilk elemanını döndürür).
Pragmatik anlamda, nedeniyle karanlığa için bu özelliği eschew tercih edebilir, ancak tahmin edilebileceği çalışır ve, nadiren, eğer hiç, erişim ihtiyacı endeksleri edeceğiz diğer daha 0dizi değişkenin ${BASH_SOURCE[@]}.
BASH_SOURCEbash-3.0-alpha'da eklendi. Test rejiminize bağlı olarak buna sahip olmayabilirsiniz. Hem erken Solaris hem de OS X'te eksik buldum. Ayrıca dönüşe bakın : U & L.SE'de yalnızca bir işlevden veya kaynaklı komut dosyasından `` geri dönebilir '' .