首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash中的嵌套条件(if [[...)

Bash中的嵌套条件(if [[...)
EN

Stack Overflow用户
提问于 2011-05-06 18:04:20
回答 2查看 7K关注 0票数 0

我有几个问题想要回答,因为到目前为止我还不是Bash专家……在执行特定任务之前,我需要检查几个条件,但其中一些是相关的,无法分离:我希望检查以下语句:

代码语言:javascript
复制
if ((1 OR 2) AND (3 OR 4))
   then
      blabla...
fi

到目前为止我做到了,

代码语言:javascript
复制
if [[ "[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]" && "[ `echo "$5" | cut -c 4-5` -lt 0 || `echo "$5" | cut -c 4-5` -gt 23 ]" ]]
   then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi

而且它工作正常。我有一种感觉,为了执行这个检查,可以做一些容易得多的事情,但我看不出如何……

第二件事,在我上面写的代码中,你可以看到:

代码语言:javascript
复制
"[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]"

简单的方括号对应于测试函数,对吗?那么,为什么在使用双引号时会正确地调用它呢?我明白我不能在那里放任何反引号,这对我的回声“$5”没有任何意义…但是双引号应该替换特殊字符,如$,并防止忽略单个空格,那么为什么它要替换[字符?它被认为是这些特殊字符中的一个吗?

提前感谢您的回答!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-06 21:31:39

不要重复自己的话:

代码语言:javascript
复制
a=$(echo "$5" | cut -c 1-2)
b=$(echo "$5" | cut -c 4-5)

或者使用bash参数扩展语法:

代码语言:javascript
复制
a=${5:0:2}
b=%{5:3:2}

你可以使用算术替换:

代码语言:javascript
复制
if (( a < 0 || a > 23)) && (( b < 0 || b > 23 )); then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi
票数 1
EN

Stack Overflow用户

发布于 2011-05-06 18:32:29

来自help [[

( EXPRESSION )返回表达式

的值

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5909811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档