0

我有几个问题想回答,因为到目前为止我还不是 Bash 专家......在执行特定任务之前我需要检查几个条件,但其中一些是相关的并且不能分离:我会像下面要检查的语句:

if ((1 OR 2) AND (3 OR 4))
   then
      blabla...
fi

到目前为止,我做了这个,

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

它工作正常。我觉得为了执行此检查可以做一些更容易的事情,但我看不出如何......

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

"[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]"

简单的方括号对应于测试功能,对吧?那么为什么在放置双引号时正确调用它呢?我知道我不能在那里放任何反引号,这对我的 echo "$5"... 没有任何意义,但是双引号应该替换特殊字符,例如 $ 并防止忽略单个空格,所以为什么是它取代了 [ 字符?它是否被视为这些特殊字符之一?

预先感谢您的回答!

4

2 回答 2

1

来自help [[

 ( EXPRESSION )   Returns the value of EXPRESSION
于 2011-05-06T10:32:28.687 回答
1

不要重复自己:

a=$(echo "$5" | cut -c 1-2)
b=$(echo "$5" | cut -c 4-5)

或使用 bash 参数扩展语法:

a=${5:0:2}
b=%{5:3:2}

您可以使用算术替换:

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
于 2011-05-06T13:31:38.540 回答