簡體   English   中英

Bash 平等沒有像我預期的那樣表現

[英]Bash equality not behaving as I expect it

我想檢查 bash 中的最后一個命令是否失敗。 我將此迷你腳本基於

#!/bin/bash
mkdir nothere/cantcreate

echo $?

if [ $? -eq 0 ]; then
    echo "command succeed"
    else
    echo "command failed"
fi

這將打印以下內容:

mkdir: 無法創建目錄 'nothere/cantcreate': 沒有這樣的文件或目錄

1

命令成功

我希望它打印command failed ,因為$? 是 1. 為什么等式不符合我的預期?

如評論部分所述,當您到達 if 子句$? 評估為echo $? .

最直接和最簡單的方法是將命令本身放在 if 子句中:

#!/bin/bash
if mkdir nothere/cantcreate; then
    echo "command succeed"
else
    echo "command failed"
fi

echo $? 本身是成功打印失敗mkdir的退出代碼的命令。 如果要捕獲mkdir的退出代碼,則需要在命令調用后立即存儲它。

#!/bin/bash
mkdir nothere/cantcreate
RESULT=$?
echo $RESULT

if [ $RESULT -eq 0 ]; then
  echo "command succeed"
else
  echo "command failed"
fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM