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