我正在為 bash 中的這個簡單陳述句而苦苦掙扎:
基本上我希望只有當 OPTION1 為“yes”或 1 并且 OPTION2 不同于“yes 或 1”時才顯示訊息
問題是即使 OPTION2 是一個空字串,它也會被評估為 TRUE。
#!/bin/bash
OPTION1="YES"
OPTION2=""
if [[ "${OPTION1}" =~ ^[Ys][Es][Ss]|[1] ]] && [[ ! "${OPTION2}" =~ ^[Yy][Ee][Ss]|[1] ]];then
echo "EXECUTED"
fi
如果 OPTION2 是空字串,我如何修改它以使 if 陳述句失敗?
uj5u.com熱心網友回復:
問題是如果$OPTION2為空,則匹配失敗,!從而使整個測驗成功。在 RE 中添加一個空字串的測驗:
#!/usr/bin/env bash
# Turn on case-insensitive matching to tidy up the REs
shopt -s nocasematch
OPTION1="YES"
OPTION2=""
if [[ "${OPTION1}" =~ ^(yes|1)$ ]] && [[ ! "${OPTION2}" =~ ^(yes|1|)$ ]]; then
echo "EXECUTED"
else
echo "NOT EXECUTED"
fi
或者,如果$OPTION2為空,則展開與正則運算式匹配的值:
if [[ "${OPTION1}" =~ ^(yes|1)$ ]] && [[ ! "${OPTION2:-yes}" =~ ^(yes|1)$ ]]; then
echo "EXECUTED"
else
echo "NOT EXECUTED"
fi
uj5u.com熱心網友回復:
您可以檢查 OPTION2 是否不是空字串[[ ! -z "${OPTION2}" ]]
#!/bin/bash
OPTION1="YES"
OPTION2=""
if [[ "${OPTION1}" =~ ^[Ys][Es][Ss]|[1] ]] && [[ ! -z "${OPTION2}" ]] && [[ ! "${OPTION2}" =~ ^[Ys][Ee][Ys]|[1] ]];then
echo "EXECUTED"
fi
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/466763.html
下一篇:正則運算式和決議字串行
