Perl スタイルの「or die」を持つ Bash 関数があります。例えば、
#!/bin/bash
func1 () {
local val
val=`cat foobar` || exit 7
echo "func1: cat returns $?"
}
myval=`func1`
echo "Line X should not be reached (retn = $? val = $myval)"
myval=$(func1)
echo "Line Y should not be reached (retn = $? val = $myval)"
func1
echo "Line Z should not be reached (retn = $?)"
関数を直接呼び出すと、exit
. しかし、関数が使用したい値を返す場合、コマンド置換はexit
. つまり、exit は戻り値に格納されるだけで$?
、次の行が実行されます。
デバッグ オプションを指定して実行-x
すると、コマンド置換がサブシェルに似ていることがわかります。これは、bash がより深いネストを出力するためです。そのexit
ため、メイン スクリプトには適用されません。
出力例:
cat: foobar: No such file or directory
Line X should not be reached (retn = 7 val = )
cat: foobar: No such file or directory
Line Y should not be reached (retn = 7 val = )
cat: foobar: No such file or directory
func1 を呼び出して、その出力を (変数、ループ、if などで) 使用しながら、ショートサーキットを活用する方法はありexit
ますか?