bashスクリプトで、関数を実行して戻り値を表示させたいのですが。
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
fun2`を実行すると、"34"と表示されません。なぜこのようなことが起こるのでしょうか?
bashにはreturn
文がありますが、この文で指定できるのは、その関数自身のexit
ステータス(0
~255
の間の値で、0は"success"を意味する)だけです。つまり、return
はあなたが望むものではありません。
そうすれば、関数の出力を $()
の中括弧を使って取り込むことができるので、まさにあなたが望んでいることのように思えます。
以下に例を示します。
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
また、(0〜255の整数を返したいだけの場合)戻り値を得るための別の方法として、$?
があります。
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
また、戻り値を使って、fun1 || fun2
は fun1
が 0
を返した場合に fun2
のみを実行するというようなブーリアンロジックを使うことができることにも注意してください。 デフォルトの戻り値は、その関数内で最後に実行されたステートメントの終了値です。
return文は、スクリプト全体のexit
と同じように、その関数の終了コードを設定します。
最後のコマンドの終了コードは、常に $?
変数に格納されています。
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}