Як передавати параметри для функціонування в скрипті bash?


14

Я хотів би написати функцію, яку я можу викликати зі скрипту з багатьма різними змінними. З якихось причин у мене багато проблем, роблячи це. Приклади, які я читав, завжди просто використовують глобальну змінну, але це не зробить мій код набагато зрозумілішим, наскільки я бачу.

Приклад використання:

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

Я спробував використовувати $1та інше у функції, але потім це просто бере глобальний, з якого був викликаний весь сценарій. В основному то , що я шукаю що - щось на зразок $1, $2і так далі , але в локальному контексті функції. Як ви знаєте, функції працюють на будь-якій правильній мові.


Використовуючи $ 1 і $ 2 у своєму прикладі, додайте функцію "працює". Спробуйте echo $1і echo $2в цьому.
Віланд

Мій приклад був жахливо незавершеним, я оновив його купу. Тепер afaik це більше не працюватиме.
користувач181822

Замініть ваш result = з result=$(($1 + $2))і додати echo $resultпісля нього , і він працює правильно, $ 1 і $ 2 ваші функції аргументи.
Віланд

Відповіді:


18

Щоб викликати функцію з аргументами:

function_name "$arg1" "$arg2"

Функція посилається на передані аргументи за їхньою позицією (не за назвою), тобто $ 1, $ 2 тощо. $ 0 - назва самого сценарію.

Приклад:

#!/bin/bash

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

add 1 2

Вихідні дані

./script.sh
 Result is: 3

2
Зараз я усвідомлюю свою помилку. Я використовував $ 0 і $ 1 у функції, і $ 0 дійсно вирішено на ім'я сценарію. Я сприйняв це за параметр сценарію, а не для самої функції. Дякую!
користувач181822

6

У головному сценарії $ 1, $ 2 представляє змінні, як ви вже знаєте. У підписках або функціях $ 1 і $ 2 будуть представляти параметри, передані функції, як внутрішні (локальні) змінні для цих підписок.

#!/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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.