我正在运行一个列号可以在0-50范围内的开关箱。现在每一种情况都支持离散的列数,我观察到它的失效。
以下是代码:
i=10
a=1
b=0.65
if [ "$a" != "$b" ]; then
case $i in
[1]|[2]|[5]) echo "Not OK"; ;;
[9-10]|[12]) echo "may be ok"; ;;
*) echo "no clue - $i"; ;;
esac
fi我希望这段代码输出may be ok,但得到no clue - 10。
发布于 2014-08-25 08:40:02
Bash case不适用于数字范围。[]用于shell模式。
例如,这种情况下,[1-3]5|6)将适用于15、25、35或6。
您的代码应该如下所示:
i=10
a=1
b=0.65
if [ "$a" != "$b" ] ; then
case $i in
1|2|5) echo "Not OK"; ;;
9|10|12) echo "may be ok"; ;;
*) echo "no clue - $i"; ;;
esac;
fi如果i可以是介于9和10之间的real ,那么您需要在范围中使用if (而不是大小写)。
发布于 2017-07-01 09:12:54
if 和 [ 解决方案
arg=1
if [ "$arg" -lt 5 ]; then
echo 'less than 5'
elif [ "$arg" -lt 15 ]; then
echo 'less than 15'
elif [ "$arg" -eq 17 ] || [ "$arg" -eq 19 ]; then
echo '17 or 19'
else
echo 'neither'
fiPOSIX 7
Bash遵循https://stackoverflow.com/a/25482040/895245提到的POSIX
以下是引号:01部分"Case条件构造“:
条件构造案例应该执行与几个模式中的第一个模式对应的复合列表(见模式匹配表示法).具有相同的复合列表的多个模式将由“\”符号分隔。..。 案例结构的格式如下: case word in ( pattern1 )复合列表;;[(模式\模式.)复合列表;;] . [(模式.)[ esac ]
然后13部分"2.13.模式匹配表示法“说:
[如果一个开括号引入了一个括号表达式,就像在XBD括号表达式中一样。
扩展正则表达式指出了“9.3.5RE括号表达式”一节,其中说:
括号表达式(括在方括号中的表达式,"[]“)是一个RE,它应该匹配一组特定的单个字符,并且可以根据包含在括号表达式中的非空列表表达式集匹配一组特定的多字符排序元素。
因此,当您执行以下操作时,只考虑单个字符:
[9-10]https://stackoverflow.com/questions/25481799
复制相似问题