25 Mart 2020 Çarşamba

bash kodlama $@ gömülü değişkeni - All the positional parameters (as separate strings)

Giriş
Açıklaması şöyle. Aslında Java'daki main metodundaki String[] argv olarak düşünülebilir.
Special Parameters
  The shell treats several parameters specially.  These parameters may  only
  be referenced; assignment to them is not allowed.
       
  @      Expands  to the positional parameters, starting from one.  When the
         expansion occurs within double quotes, each parameter expands to  a
         separate  word.   That  is, "$@" is equivalent to "$1" "$2" ...  If
         the double-quoted expansion occurs within a word, the expansion  of
         the first parameter is joined with the beginning part of the origi‐
         nal word, and the expansion of the last parameter  is  joined  with
         the  last  part of the original word.  When there are no positional
         parameters, "$@" and $@ expand to nothing (i.e., they are removed).
Örnek
En son parametreyi çıkartmak için şöyle yaparız
local argv=( "$@" )
last=${argv[-1]}
unset 'argv[-1]'
Örnek
Şöyle yaparız.
xdg-open "$@">/dev/null 2>&1
Örnek
Komutumuzu şöyle çağıralım.
mycommand -a "foo bar"
Parametreleri bir başka array değişkene atamak istersek şöyle yaparız.
args=("$@")
Daha sonra değişkeni kullanmak için şöyle yaparız. Burada "${arr[@]}" ile tüm dizi dolaşılıyor ve git komutuna ilave ediliyor. Dizi dolaşmak için bash kodlama - array yazısına bakabilirsiniz.
elif [[ $commit == true ]]; then
    git commit "${args[@]}"
elif [[ $checkout == true ]]; then
    git checkout "${args[@]}"
else
Böylece git komutu şöyle çağrılır. Array'imiz iki tane elemana sahiptir.
git commit -a "foo bar"
Eğer girdiyi array yerine tek bir string'e atasaydık yani şöyle yapsaydık
args=$@
Ve bu değişkeni "$args" olarak kullansaydık bu durumda çıktı olarak şunu elde ederdik ve bu yanlış olurdu.
git commit '-a foo bar'

Hiç yorum yok:

Yorum Gönder