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を使用すると、関数 "works"が追加されます。試してみてくださいecho $1echo $2、それインチ
ウィーランド

私の例は恐ろしく不完全でした、私はそれを束に更新しました。今ではもう機能しません。
user181822

result = with 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をスクリプト名に解決しました。関数自体ではなく、スクリプトのパラメーターと間違えました。ありがとうございました!
-user181822

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.