説明できない奇妙な動作を見つけました。次のコードは正常に動作します。
function prepare-archive {
blah-blah-blah...
_SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
exit $?
blah-blah-blah...
}
私が期待する価値を得ることを意味します:
bash -x ./this-script.sh:
++ exit 1
+ _SPEC_FILE='/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 1
local
変数に定義を追加するとすぐに:
local _SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
私は次のようになります:
bash -x ./this-script.sh:
++ exit 1
+ local '_SPEC_FILE=/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 0
$:~/MyScripts$ echo $?
0
質問:なぜですか? 何が起きたの?サブシェルからlocal
変数への出力をキャッチして、サブシェルの戻り値を確実にチェックできますか?
PS :prepare-archive
メイン シェル スクリプトで呼び出されます。1 つ目exit
はexit
fromcheck-spec-file
関数、2 つ目は fromprepare-archive
関数です。この関数自体はメイン シェル スクリプトから実行されます。check-spec-file
byから値を返しexit 1
、この値を に渡しますexit $?
。したがって、それらは同じであるべきだと思います。