web-dev-qa-db-ja.com

bashスクリプトで関数にパラメーターを渡す方法は?

多くの異なる変数を使用してスクリプトから呼び出すことができる関数を記述したいと思います。いくつかの理由で、これを行うのに多くの問題を抱えています。私が読んだ例は常にグローバル変数を使用しているだけですが、私の知る限り、コードを読みやすくすることはできません。

使用目的の例:

#!/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などのようなものですが、関数のローカルコンテキストにあります。ご存じのように、関数は適切な言語で機能します。

14
user181822

引数を指定して関数を呼び出すには:

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
18
Rahul

メインスクリプトの$ 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