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

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関数のローカルコンテキストで探しています。ご存知のように、関数は任意の適切な言語で動作できます。

答え1

パラメータを使用して関数を呼び出すには、次の手順に従ってください。

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

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

関連情報