我希望将以下比较行缩减为短路
[[ $ANSWER = YES ]] || [[ $ANSWER = yes ]] || [[ $ANSWER = Yes ]] && echo your answer is really yes
所以我尝试以下内容但没有成功
[[ $ANSWER = ([YES|Yes|yes]) ]] && echo your answer is really yes
[[ $ANSWER = [YES|Yes|yes] ]] && echo your answer is really yes
请以正确的方式提出建议?
答案 0 :(得分:2)
答案 1 :(得分:2)
您可以使用正则表达式:
if [[ $ANSWER =~ ^(YES|Yes|yes)$ ]] ; then echo 'your answer is really yes'; fi
答案 2 :(得分:2)
另一种方式,可能是最短的:
[[ $ANSWER =~ ^[Yy][Ee][Ss]$ ]] && echo your answer is really yes
或使用typeset(以避免 glogal shopt ):
typeset -l ANSWER
ANSWER=YES
[[ $ANSWER = yes ]] && echo your answer is really yes
仅禁用排版:
typeset +l ANSWER
来自bash man:
使用 + 代替 - 会关闭属性
答案 3 :(得分:1)
bash
允许您进行正则表达式匹配。要匹配所有可能的情况组合,可以使用以下方法:
if [[ "$ANSWER" =~ ^[Yy][Ee][Ss]$ ]]; then echo "yes!"; fi
请注意,这也会匹配yEs
或yES
,原始代码不会。如果您不想观看这些内容,请使用alfasin's answer
答案 4 :(得分:1)
[[ ${ANSWER^^} = 'YES' ]] && echo 'your answer is really yes'
那就是它。您可以阅读有关参数展开here。
的信息P.S。我想知道为什么没有人suggested to use extended globs:D
答案 5 :(得分:0)
使用grep
执行此操作的另一种方法:
ANSWER="yEs";
if grep -qi "^yes$" <<< "$ANSWER"; then
echo 'your answer is really yes'
fi
说明:
if
-q
是安静的,所以没有输出-i
不区分大小写。^
和$
,它们将与字符串完全匹配答案 6 :(得分:0)
只需glob:
[[ $ANSWER = [Yy][Ee][Ss] ]] && echo 'your answer is really yes'
扩展的glob:
shopt -s extglob
[[ $ANSWER = @(YES|Yes|yes) ]] && echo 'your answer is really yes'
答案 7 :(得分:0)