【问题标题】:Writing boolean expression in unix scripting在 unix 脚本中编写布尔表达式
【发布时间】:2017-05-31 04:34:21
【问题描述】:

嗨,谁能帮我用布尔形式写表达式,现在无法执行。这里 stat_1 和 stat_2 是两个空字符串

我最大的努力是:

[ [ "$stat_1" -a "$stat_2" ] &&  [ $stat_1 -eq 5 -a $stat_2 -eq 0 ] ]

【问题讨论】:

  • 这里$stat_1和$stat_2是两个空字符串

标签: bash shell unix sh


【解决方案1】:

我假设您想测试 stat_1 等于 5,stat_2 等于 0。

这可以通过这种方式简单地完成:

[ "$stat_1" = 5 ] && [ "$stat_2" = 0 ]

您可以使用 -a 在单个括号中执行测试,但我发现使用两组括号表达式更简洁,每组只有一个测试。

最好将变量放在引号内,否则如果它们包含空格(这会扩展为括号内的其他参数),您可能会得到不需要的结果。

如果您使用 bash,则可以访问双括号条件:

[[ "$stat_1" = 5 ]] && [[ "$stat_2" = 0 ]]

它们做同样的工作,但它们内置在 shell 中,并提供一些额外的功能,尤其是我经常使用的模式匹配 =~

【讨论】:

  • 嗨@Fred,我的情况是:在什么情况下wukk $instr_type 和$instr_subtype 是未定义的——假spns?我们应该将这两个 if 语句组合成一个块。此外,这应该是一次调用 test 而不是四次,使用 -a 开关用于 and 运算符而不是 bash 的 &&。我认为:如果 [ $var2 -a $var1 -a $var2 -eq 5 -a $var1 -eq 0 ];那么
  • @Fred 带双括号可以使用[[1 == 1 && 2 == 2]]
  • @AnitaPandey :我更喜欢有几个调用(考虑到使用内置的 shell,而不是外部程序,这非常轻量级)而不是复杂的条件(更容易理解和调试),但是是优先事项;你应该引用你的变量,除非你真的,真的确定它们只包含数字。
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多