Diş telleri ( $varvs. ${var})
Çoğu durumda $varve ${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 ( $varvs "$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 $varvs. ${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 ( $varvs $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 $fooparç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
bashkomut dosyasındaki bağımsız değişkenler üzerinde nasıl yineleme yapılır ?