Bash
如何將命令的退出狀態提取到變數中?
幾天前我開始學習 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
.