我發現了我的奇怪行爲,我無法解釋。 下面的代碼是工作確定:從subshell返回值和輸出到局部變量
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
問題:爲什麼?發生了什麼?我能否將subshell的輸出捕獲到local
變量並可靠地檢查子殼的返回值?
P.S.在主shell腳本中調用:prepare-archive
。第一個exit
是exit
從check-spec-file
函數,第二個從prepare-archive
函數 - 這個函數本身是從主shell腳本執行的。我將check-spec-file
的值返回exit 1
,然後將此值傳遞給exit $?
。因此我希望他們應該是一樣的。
在什麼情況下調用'prepare-archive'? '++ exit 1'不適合你顯示的任何代碼。 – chepner