Bunu bir kabuk betiğinde görüyorum.
variable=${@:2}
Ne yapıyor?
var="my_value"; echo var="${var[@]:2}"; echo "$var"Farkı gör?
Bunu bir kabuk betiğinde görüyorum.
variable=${@:2}
Ne yapıyor?
var="my_value"; echo var="${var[@]:2}"; echo "$var"Farkı gör?
Yanıtlar:
$@Bash'de özel değişkenin içeriğini gösteriyor . Tüm komut satırı argümanlarını içerir ve bu komut ikinci argümandaki tüm argümanları alıp değişkende saklar variable,.
İşte bir sınav komut dosyası.
#!/bin/bash
echo ${@:2}
variable=${@:3}
echo $variable
Örnek çalışma:
./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5
vars=( "${@:2}" )
$@ve ${@}aynıdır, ikincisi "daha doğru" sözdizimidir. Parantezleri kullanmanız gerekir ${@:2}, çünkü $@:2belirsizdir ve bu nedenle ${@}:2aynı şey değildir.
Bu kshda bashve son sürümlerinde bulunan bir özellik zsh.
İçinde kshve bash, kullanarak bir dizinin çeşitli öğeleri erişebilir ${array[@]:first:length}için kadar genişler sözdizimi, length(veya eğer tüm lengthatlanmıştır) elemanları arrayile başlanarak, dizinin (dizinin elemanları listesinde işaretlerde sayısal kriteri) ilk indeks büyük veya eşittir first. Skaler bağlamda (burada sayıl değişkene bir atama gibi) elemanların listesi ile uzay karakterlerle katıldığında bashve ksh93ilk karakteri ile $IFS(ya da hiçbir şey varsa $IFSile bu ayar kaldırılamaz ise boş veya uzay) zsh.
Örneğin:
$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>
$@özel bir durumdur. $@konumsal parametrelerin dizisidir ( $1, $2...). İle kullanıldığında Fakat :, $0da dahildir. Yani ${@:1}aynı $@, ${@:0}diğer diziler için olduğu gibi değil .
İçinde zsh, biraz farklı. sözdizimini yalnızca yakın zamanda uyumluluk için zshekledi, kshancak öğe aralıklarını seçmek için kendi sözdizimine sahip.
Aksine kshve bash, zshdiziler sayıl değişkenlerden farklı bir değişken tipidir, değil azdır ( zshbaşka değişken türü olarak ilişkilendirilebilir diziler vardır) ve endeks 1 yerine 0 olarak başlar.
Çünkü zshdizi elemanlarına erişirsiniz $a[first,last]( lastsondan geriye doğru saymak negatif olabilir).
olarak zsh,
a[23]=a a[5]=b a[235]=c a[45]=d
çoğu boş olan 235 elemanlı bir dizi yaratır. $a[12,50]elemanlar 12 ila 50'ye ${a[@]:12:2}genişler ve sadece (boş) $a[12]ve $a[13]elemanlara genişlerdi . Özel bir durum olarak ve yine birlikte taşınabilirlik için ksh93ve bash, zshaynı zamanda bir kabul 0birincisi için eleman $@olduğu gibi davranır $0.
Böylece, 3 kabuğun tamamında ${a[@]:x:n}ve ${@:x:n}taşınabilir olarak kullanabilirsiniz , ancak yalnızca seyrek olmayan diziler için ve IFS'in değerine dikkat edin.