bashスクリプトの学習を開始/学習しようとしていますが、端末で関数に引数を渡す方法(以下を参照)にどのような問題があるのか疑問に思います。私の方法はインターネットチュートリアルの多くの方法に似ているようです。
#!/bin/bash
function addition_example(){
result = $(($1+$2))
echo Addition of the supplied arguments = $result
}
次のようにスクリプトを呼び出します。
source script_name.sh "20" "20"; addition_example
これにより、次のものが返されます。
bash: +: syntax error: operand expected (error token is "+")
私も次のことを試しました。
addition_example "$20" "$20"
これにより、次のものが返されます。
bash: result: command not found
Addition of the supplied arguments =
ベストアンサー1
addition_example
パラメータなしで関数を実行しています。したがって、$1
変数$2
は空であり、実際に行うことresult = $((+))
はまさにあなたが言及したエラーです。
$ result = $((+))
bash: +: syntax error: operand expected (error token is "+")
を実行すると、source script_name.sh 20 20
シェルはscript_name.sh
それをソースとして指定し、引数20
として渡します。20
しかしscript_name.sh
、実際には何のコマンドも含まれておらず、関数宣言だけがあります。したがって、これらの引数は無視されます。その後、後続のコマンドで引数なしで実行されるため、addition_example
上記のエラーが発生します。
また、構文エラーがあります。=
シェルスクリプトでは、代入演算子()の周囲にスペースを含めることはできません。スクリプトを次のように変更する必要があります。
function addition_example(){
result=$(($1+$2))
echo "Addition of the supplied arguments = $result"
}
次に、必須パラメータを使用して関数を実行します。
$ source script_name.sh; addition_example 20 20
Addition of the supplied arguments = 40