Bir bash betiğinde çalışmak için parametreleri nasıl iletirim?


14

Birçok farklı değişkenli bir senaryodan çağırabileceğim bir fonksiyon yazmak istiyorum. Bazı nedenlerden dolayı bunu yaparken çok sorun yaşıyorum. Okuduğum örnekler her zaman sadece global bir değişken kullanır, ancak kodumu görebildiğim kadarıyla daha okunabilir hale getirmez.

Kullanım amacı örneği:

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
result=$para1 + $para2
}

add $var1 $var2
add $var3 $var4
# end of the script

./myscript.sh 1 2 3 4

Ben $1ve böyle işlevini kullanarak denedim , ama sonra sadece tüm komut dosyası çağrıldı küresel olanı alır. Temelde ne arıyorum gibi bir şey $1, $2vb ama bir fonksiyonun yerel bağlamda. Bildiğiniz gibi, fonksiyonlar herhangi bir uygun dilde çalışır.


Örneğinizde $ 1 ve $ 2 kullanarak "works" işlevini ekleyin. Deneyin echo $1ve echo $2içine.
Wieland

Örneğim korkunç bir şekilde eksikti, bir demet güncelledim. Şimdi afaik artık işe yaramayacak.
user181822

Şu Verilerinizi değiştirin result = ile result=$(($1 + $2))ve ekleme echo $resultondan sonra ve $ 1 ve $ 2 sizin fonksiyonları argümanlar vardır, düzgün çalışır.
Wieland

Yanıtlar:


18

Bağımsız değişkenli bir işlevi çağırmak için:

function_name "$arg1" "$arg2"

İşlev, geçilen bağımsız değişkenleri konumlarına göre (ada göre değil), yani $ 1, $ 2 vb. Anlamına gelir. $ 0 betiğin kendisinin adıdır.

Misal:

#!/bin/bash

add() {
    result=$(($1 + $2))
    echo "Result is: $result"
}

add 1 2

Çıktı

./script.sh
 Result is: 3

2
Hatamı şimdi anlıyorum. İşlevde $ 0 ve $ 1 kullanmıştım ve $ 0 gerçekten kod adına çözümlenmişti. Ben fonksiyonun kendisi için değil, komut dosyasının bir parametre için yanlış yaptım. Teşekkür ederim!
user181822

6

Ana komut dosyasında $ 1, $ 2, değişkenleri zaten bildiğiniz gibi temsil ediyor. Aboneliklerde veya işlevlerde, $ 1 ve $ 2, bu aboneliklerin dahili (yerel) değişkenleri olarak işlevlere aktarılan parametreleri temsil eder.

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
  #Note the $1 and $2 variables here are not the same of the
  #main script... 
  echo "The first argument to this function is $1"
  echo "The second argument to this function is $2"
  result=$(($1+$2))
  echo $result

}

add $var1 $var2
add $var3 $var4
# end of the script


./myscript.sh 1 2 3 4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.