Bash işlevine parametre geçirme

Bir Bash fonksiyonuna nasıl parametre aktarılacağını araştırmaya çalışıyorum, ancak karşıma çıkan şey her zaman komut satırından nasıl parametre aktarılacağı oluyor.

Komut dosyam içinde parametreleri geçmek istiyorum. Denedim:

myBackupFunction("..", "...", "xx")

function myBackupFunction($directory, $options, $rootPassword) {
     ...
}

Ancak sözdizimi doğru değil, fonksiyonuma nasıl parametre aktarabilirim?

Çözüm

Bir fonksiyonu bildirmenin iki tipik yolu vardır. Ben ikinci yaklaşımı tercih ediyorum.

function function_name {
   command...
} 

veya

function_name () {
   command...
} 

Bir fonksiyonu argümanlarla çağırmak için:

function_name "$arg1" "$arg2"

İşlev, iletilen bağımsız değişkenleri konumlarına göre (adlarına göre değil) ifade eder, yani $1, $2, vb. $0 kodun kendi adıdır.

Örnek:

function_name () {
   echo "Parameter #1 is $1"
}

Ayrıca, işlevinizi bildirildikten sonra çağırmanız gerekir.

#!/usr/bin/env sh

foo 1  # this will fail because foo has not been declared yet.

foo() {
    echo "Parameter #1 is $1"
}

foo 2 # this will work.

Çıktı:

./myScript.sh: line 2: foo: command not found
Parameter #1 is 2

Referans: Gelişmiş Bash-Komut Dosyası Kılavuzu.

Yorumlar (9)

Yüksek seviyeli programlama dilleri (C/C++/Java/PHP/Python/Perl...) bilgisi, meslekten olmayan kişilere bash fonksiyonlarının bu diğer dillerde olduğu gibi çalışması gerektiğini düşündürecektir. Bunun yerine, bash fonksiyonları kabuk komutları gibi çalışır ve bir kabuk komutuna (ls -l) bir seçenek aktarılabileceği gibi argümanların kendilerine aktarılmasını bekler. Gerçekte, bash'teki fonksiyon argümanları konumsal parametreler olarak ele alınır ($1, $2..$9, ${10}, ${11}, vb.). Getopts`un nasıl çalıştığı düşünüldüğünde bu sürpriz değildir. Bash'te bir fonksiyonu çağırmak için parantezler gerekli değildir.


(Not: Şu anda Open Solaris üzerinde çalışıyorum.)

# bash style declaration for all you PHP/JavaScript junkies. :-)
# $1 is the directory to archive
# $2 is the name of the tar and zipped file when all is done.
function backupWebRoot ()
{
    tar -cvf - $1 | zip -n .jpg:.gif:.png $2 - 2>> $errorlog &&
        echo -e "\nTarball created!\n"
}

# sh style declaration for the purist in you. ;-)
# $1 is the directory to archive
# $2 is the name of the tar and zipped file when all is done.
backupWebRoot ()
{
    tar -cvf - $1 | zip -n .jpg:.gif:.png $2 - 2>> $errorlog &&
        echo -e "\nTarball created!\n"
}

#In the actual shell script
#$0               $1            $2

backupWebRoot ~/public/www/ webSite.tar.zip
Yorumlar (0)

Parantezleri ve virgülleri atlayın:

 myBackupFunction ".." "..." "xx"

ve fonksiyon şu şekilde görünmelidir:

function myBackupFunction() {
   # here $1 is the first parameter, $2 the second etc.
}
Yorumlar (0)