Bash

將變數與字元串 bash 進行比較

  • April 4, 2018
st.txt

“失敗” “aa” “2018-04-03T17:43:38Z”

  while read status name date; do
   case "$status" in
   'aborted')
       echo -1
       ;;
   "failed")
       echo -1
       ;;
   'succeeded')
       echo 0
       ;;
   *)
       echo 0
   esac
   exit 0
done < st.txt

但我總是得到 0 作為輸出。

您應該替換"failed""\"failed\"". 它應該是:

while read status name date; do
   case "$status" in
       'aborted')
           echo -1
           ;;
       "\"failed\"")
           echo -1
           ;;
       'succeeded')
           echo 0
           ;;
       *) echo 0
   esac
   exit 0
done<st.txt

也考慮使用read with -r.

還有一種更簡單的方法可以做你想做的事:

if [ "$(cut -d ' ' -f1 st.txt)" = "\"failed\"" ]
then
   printf -- "-1\n"
fi

另一種解決方案是在雙引號字元串周圍添加單引號:

while read status name date; do
   case "$status" in
       '"aborted"')
            echo -1
            ;;
       '"failed"')
            echo -1
            ;;
       '"succeeded"')
            echo 0
            ;;
       *)
            echo 0
   esac
   exit 0
done < st.txt

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