Bash

如何將命令的退出狀態提取到變數中?

  • August 5, 2021

幾天前我開始學習 Bash。

我正在嘗試將grep表達式的退出狀態獲取到這樣的變數中:

check=grep -ci 'text' file.sh

我得到的輸出是

No command '-ic' found

我應該使用管道命令嗎?

你的命令,

check=grep -ci 'text' file.sh

將被 shell 解釋為“-ci使用參數text和執行命令,file.sh並將變數設置為其環境check中的值grep”。


shell 將最近執行的命令的退出值儲存在變數 中?。您可以將其值分配給您自己的變數之一,如下所示:

grep -i 'PATTERN' file
check=$?

如果你想對這個值採取行動,你可以使用你的check變數:

if [ "$check" -eq 0 ]; then
   # do things for success
else
   # do other things for failure
fi

或者您可以跳過使用單獨的變數並必須一起檢查$?

if grep -q -i 'pattern' file; then
 # do things (pattern was found)
else
 # do other things (pattern was not found)
fi

(注意-q,它指示grep不輸出任何內容並在匹配時立即退出;我們對這裡匹配的內容並不真正感興趣)

或者,如果您只想在找不到模式時“做事*”*:

if ! grep -q -i 'pattern' file; then
 # do things (pattern was not found)
fi

$?僅當您需要稍後使用它時才需要保存到另一個變數中,此時值$?已被覆蓋,如

mkdir "$dir"
err=$?

if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
   printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
   exit "$err"
fi

在上面的程式碼片段中,$?會被[ "$err" -ne 0 ] && [ ! -d "$dir" ]測試的結果覆蓋。僅當我們需要顯示它並將其與exit.

引用自:https://unix.stackexchange.com/questions/294371