【问题标题】:ASH if statement in a if statementif 语句中的 ASH if 语句
【发布时间】:2012-07-25 20:45:43
【问题描述】:

我见过许多具有多个相互关联的条件的示例,但有两种不同的不相关条件,其中第二个条件只有在第一个条件为真时才会发生。 如何将以下内容组织得井井有条并在 1 行中?

funtion1
if [[ $valueX == 2 ]]; then
    funtion2
    if [[ $valueY -gt 16 ]]; then
        sleep $valueZ
    fi
fi

【问题讨论】:

  • 您的问题被标记为“bash”和“ash”,这是两个不同的外壳。 [[ 语法是特定于 bash 的; ash 不支持。

标签: bash syntax ash


【解决方案1】:

你可以把它组织得井井有条,或者你可以把它放在一行中。

我想说你现在拥有的东西已经很好地组织起来了。我认为没有任何方法可以在不降低可读性的情况下以更少的行重新组织它。

(如果funtion2 不存在,您可以结合这两个条件。)

如果您坚持将整段代码放在一行中,您可以简单地通过连接行并添加分号来做到这一点,如下所示:

funtion1 ; if [[ $valueX == 2 ]]; then funtion2 ; if [[ $valueY -gt 16 ]]; then sleep $valueZ ; fi ; fi

但正如我所说,我认为没有人会称这为“井井有条”;它比原始的多行缩进版本更难阅读和维护。

请注意,[[ 语法特定于 不支持。

(哦,你拼错了“function”。)

【讨论】:

  • 好的,谢谢,我一个接一个地拥有了 20 个,并且认为它可以变得更紧凑.. 但你猜不是 :)
  • @Nixx:如果条件之间存在某种一致的关系,您可能仍然可以重新组织代码。
  • 嗯,不确定,只有function2和valueX对所有20个都是相等的。其他元素不同(尽管按顺序编号)
  • 目前我正在清理我的代码,结果表明最好将所有内容都放在 1 行中。我该怎么做呢?是否有适用于所有情况的“行尾”字符?
  • 在某些情况下,您可以用; 替换行尾。如果您将所有行合二为一,在then 行之后添加分号except,那么它应该可以工作。但是这样的布局是丑陋且难以阅读的。 为什么最好把所有东西都放在一条线上?
最近更新 更多