这是在 bash 上的“else”语句内创建数组的正确方法吗?

这是在 bash 上的“else”语句内创建数组的正确方法吗?

有谁知道这是否正确?这是在 bash 上的“else”语句内创建数组的正确方法吗? else [[ $SELECTION != "a|b|c|x" ]]

答案1

我假设你的目的是测试$SELECTION是否不是 abcx,并且您打算对语句的“else-if”分支执行此操作if

您的测试将测试是否$SELECTION不是文字字符串a|b|c|x。如果您打算在“else-if”分支(编写为 )中使用测试,则语法不正确elif [[ ... ]]

如果您想测试是否$SELECTION是除a, b, c, 或之外的其他内容x,那么您可以使用

if ...; then
    ...
else
    case $SELECTION in
        a|b|c|x)
            # do nothing here
            ;;
        *)
            echo 'it is not a, b, c, or x'
    esac
fi

这使用 POSIX 标准case语句,如果给定值与任何|- 分隔模式匹配,则echo该语句不执行任何操作;如果不匹配,则调用。

或者,

if ...; then
    ...
elif [[ $SELECTION != @(a|b|c|x) ]]; then
    echo 'it is not a, b, c, or x'
fi

|这使用了扩展的通配模式,它匹配由inside分隔的任何一个模式@(...)

或者,摆脱尴尬的!=测试:

if ...; then
    ...
elif [[ $SELECTION == !(a|b|c|x) ]]; then
    echo 'it is not a, b, c, or x'
fi

请注意,该模式必须不带引号。测试是否在elif分支中进行与测试本身无关。

请参阅手册的“模式匹配”部分bash

相关内容