sha*_*mik 55 bash switch-statement
我正在使用列号运行switch case,我的列号可以是0到50.在循环中运行时 - 它们会得到验证.现在每个案例都支持离散列号,我发现它失败了.示例:我的列号是10,这是代码 -
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
Run Code Online (Sandbox Code Playgroud)
我希望"可能没问题",但没有任何线索 - 10
Arn*_*lca 101
Bash case
不适用于数字范围.[]
用于贝壳图案.
例如,这种情况[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
Run Code Online (Sandbox Code Playgroud)
如果i
可以real
在 9到10 之间,那么你需要使用if
(而不是大小写)范围.
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'
fi
Run Code Online (Sandbox Code Playgroud)
POSIX 7
Bash 遵循/sf/answers/1783742831/提到的 POSIX
这是引用:http : //pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 “案例条件构造”部分:
条件构造案例应执行与多个模式中的第一个相对应的复合列表(请参阅模式匹配表示法)[...] 具有相同复合列表的多个模式应由“|”分隔 象征。[...]
case 结构的格式如下:
Run Code Online (Sandbox Code Playgroud)case word in [(] pattern1 ) compound-list ;; [[(] pattern[ | pattern] ... ) compound-list ;;] ... [[(] pattern[ | pattern] ... ) compound-list] esac
然后http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13部分“2.13. 模式匹配符号”说:
[ 如果一个左括号引入一个括号表达式,如 XBD RE 括号表达式
和扩展的正则表达式指向“9.3.5 RE Bracket Expression”部分,它说:
方括号表达式(包含在方括号中的表达式 "[]" )是一个 RE,它应匹配一组特定的单个字符,并且可以匹配一组特定的多字符整理元素,基于非空的集合列出括号表达式中包含的表达式。
因此,当您执行以下操作时,只会考虑单个字符:
[9-10]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
76086 次 |
最近记录: |