Bash
將退出程式碼分配給 shell 局部變數
#!/bin/bash function0() { local t1=$(exit 1) echo $t1 } function0
echo
列印空值。我期望:1
為什麼
t1
變數沒有被分配退出命令的返回值 -1
?
local t1=$(exit 1)
告訴外殼:
- 在子shell中執行
exit 1
;- 將其輸出(如輸出到標準輸出的文本)儲存在
t1
函式本地的變數中。因此,
t1
最終為空是正常的。(
$()
稱為命令替換。)退出程式碼總是分配給
$?
,所以你可以這樣做function0() { (exit 1) echo "$?" }
以獲得您想要的效果。您當然可以分配
$?
給另一個變數:function0() { (exit 1) local t1=$? echo "$t1" }
退出程式碼儲存在$? 多變的。使用命令替換僅擷取輸出,您應該使用(…) 創建 subshell:
#!/bin/bash func() { (exit 1) local t1=$? printf '%d\n' "$t1" } func