Diş telleri ( $var
vs. ${var}
)
Çoğu durumda $var
ve ${var}
aynıdır:
var=foo
echo $var
# foo
echo ${var}
# foo
Kaşlı ayraçlar yalnızca ifadelerdeki belirsizliği çözmek için gereklidir:
var=foo
echo $varbar
# Prints nothing because there is no variable 'varbar'
echo ${var}bar
# foobar
Alıntılar ( $var
vs "$var"
vs "${var}"
)
Bir değişkenin etrafına çift tırnak işareti eklediğinizde, kabuğa beyaz boşluklar içerse bile onu tek bir kelime olarak ele almasını söylersiniz:
var="foo bar"
for i in "$var"; do # Expands to 'for i in "foo bar"; do...'
echo $i # so only runs the loop once
done
# foo bar
Bu davranışı aşağıdakilerle karşılaştırın:
var="foo bar"
for i in $var; do # Expands to 'for i in foo bar; do...'
echo $i # so runs the loop twice, once for each argument
done
# foo
# bar
Olduğu gibi $var
vs. ${var}
, parantez sadece örneğin belirsizliği azaltmak için gereklidir:
var="foo bar"
for i in "$varbar"; do # Expands to 'for i in ""; do...' since there is no
echo $i # variable named 'varbar', so loop runs once and
done # prints nothing (actually "")
var="foo bar"
for i in "${var}bar"; do # Expands to 'for i in "foo barbar"; do...'
echo $i # so runs the loop once
done
# foo barbar
O Not "${var}bar"
İkinci örnekte yukarıda da yazılmış olabilir "${var}"bar
, bu durumda, yani artık parantez gerek yok "$var"bar
. Bununla birlikte, dizenizde çok sayıda alıntı varsa, bu alternatif formların okunması zorlaşabilir (ve bu nedenle bakımı zor olabilir). Bu sayfa Bash'de alıntı yapmaya iyi bir giriş sağlar.
Diziler ( $var
vs $var[@]
vs ${var[@]}
)
Şimdi diziniz için. Göre bash kılavuzu :
Bir dizi değişkenine alt simge olmadan başvurmak, diziye 0 alt simge ile başvurmakla eşdeğerdir.
Başka bir deyişle, bir dizin sağlamazsanız []
, dizinin ilk öğesini elde edersiniz:
foo=(a b c)
echo $foo
# a
Tam olarak aynı olan
foo=(a b c)
echo ${foo}
# a
Bir dizinin tüm elemanlarını elde etmek için @
, indeks olarak kullanmanız gerekir , örn ${foo[@]}
. Dizilerde parantezler gereklidir, çünkü bunlar olmadan kabuk önce $foo
parçayı genişleterek dizinin ilk öğesini ve ardından bir değişmez değeri verir [@]
:
foo=(a b c)
echo ${foo[@]}
# a b c
echo $foo[@]
# a[@]
Bu sayfa Bash'teki dizilere iyi bir giriş niteliğindedir.
Yeniden ziyaret edilen teklifler ( ${foo[@]}
vs. "${foo[@]}"
)
Bunu sormadınız ama bilmeniz iyi olan ince bir fark. Dizinizdeki öğeler boşluk içerebiliyorsa, her öğenin ayrı bir "kelime" olarak ele alınması için çift tırnak kullanmanız gerekir:
foo=("the first" "the second")
for i in "${foo[@]}"; do # Expands to 'for i in "the first" "the second"; do...'
echo $i # so the loop runs twice
done
# the first
# the second
Bunu çift tırnak içermeyen davranışla karşılaştırın:
foo=("the first" "the second")
for i in ${foo[@]}; do # Expands to 'for i in the first the second; do...'
echo $i # so the loop runs four times!
done
# the
# first
# the
# second
bash
komut dosyasındaki bağımsız değişkenler üzerinde nasıl yineleme yapılır ?