Bagaimana cara melewatkan parameter agar berfungsi dalam skrip bash?


14

Saya ingin menulis fungsi yang dapat saya panggil dari skrip dengan banyak variabel berbeda. Untuk beberapa alasan saya mengalami banyak kesulitan dalam melakukan ini. Contoh yang saya baca selalu hanya menggunakan variabel global tetapi itu tidak akan membuat kode saya lebih mudah dibaca sejauh yang saya bisa lihat.

Contoh penggunaan yang dimaksudkan:

#!/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

Saya mencoba menggunakan $1dan fungsi seperti itu, tetapi kemudian hanya mengambil yang global dari seluruh script. Pada dasarnya apa yang saya cari adalah sesuatu $1, $2dan sebagainya, tetapi dalam konteks fungsi lokal. Seperti yang Anda ketahui, fungsi berfungsi dalam bahasa apa pun.


Menggunakan $ 1 dan $ 2 pada contoh Anda menambahkan fungsi "berfungsi". Coba echo $1dan echo $2di dalamnya.
Wieland

Contoh saya sangat tidak lengkap, saya memperbaruinya banyak. Sekarang afaik itu tidak akan berfungsi lagi.
user181822

Ganti result = dengan Anda result=$(($1 + $2))dan tambahkan echo $resultsetelah itu dan berfungsi dengan benar, $ 1 dan $ 2 adalah argumen fungsi Anda.
Wieland

Jawaban:


18

Untuk memanggil fungsi dengan argumen:

function_name "$arg1" "$arg2"

Fungsi mengacu pada argumen yang diteruskan oleh posisi mereka (bukan dengan nama), yaitu $ 1, $ 2, dan sebagainya. $ 0 adalah nama skrip itu sendiri.

Contoh:

#!/bin/bash

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

add 1 2

Keluaran

./script.sh
 Result is: 3

2
Saya menyadari kesalahan saya sekarang. Saya telah menggunakan $ 0 dan $ 1 dalam fungsi dan $ 0 diselesaikan untuk nama skrip. Saya mengira itu untuk parameter skrip dan bukan fungsi itu sendiri. Terima kasih!
user181822

6

Dalam skrip utama $ 1, $ 2, mewakili variabel seperti yang sudah Anda ketahui. Dalam subskrip atau fungsi, $ 1 dan $ 2 akan mewakili parameter, diteruskan ke fungsi, sebagai variabel internal (lokal) untuk subskrip ini.

#!/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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.