変数を文字列bashと比較する

変数を文字列bashと比較する
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

しかし、私はいつも出力としてゼロを取得します。

答え1

"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

答え2

別の解決策は、二重引用符で囲まれた文字列の周りに一重引用符を追加することです。

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

関連情報