将变量与字符串 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

但我总是得到 0 作为输出。

答案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

相关内容