Shell 腳本無法解析 if 語句下的字串

Shell 腳本無法解析 if 語句下的字串

我有一個簡單的腳本,我試著在其中尋找 make some_target 是否存在。如果不存在則列印一條語句並退出 1。

#!/bin/bash
set +ex
output=$(make -n some_target 2>&1 | head -1)
echo "$output"
if [ "$output" == "*No rule to make target*" ]; then
  echo "Target is not Present"
  exit 1
else
  echo "foo"  
fi

但它拋出一個錯誤並進入 else 循環

make: *** No rule to make target 'some_target'.  Stop.
test.sh: 5: [: make: *** No rule to make target 'some_target'.  Stop.: unexpected operato                                                                                                  
foo

答案1

我能夠在下面找到答案:

#!/bin/sh
set +ex 
if make -n some_target 2>&1 | grep -m 1 "No rule to make target"; then
        echo "Target is not Present"
        exit 1
else
        echo "foo"
fi

答案2

模式匹配(*)可以在bash邏輯運算符 ===、 ,!=其中右邊的操作數被視為模式。所以你可以寫出你的條件:

if [[ $output == *'No rule to make target'* ]]

檢查答案是否包含No rule to make target.

也就是說,檢查make?的回傳碼可能會更有效。

(*) 這與檔案名稱的基本模式相符相同。還有一個=~採用正規表示式的邏輯運算子。

相關內容