在if子句中分配变量

时间:2011-05-13 08:15:17

标签: bash zsh

我有以下if子句:

if $(echo "$INDEX" | grep -c '^?? ' &> /dev/null) > 0 ;

输出与grep表达式匹配的字符串数。如何将该计数分配给if子句中的变量,以便我不必执行该命令两次来获取字符串数?

4 个答案:

答案 0 :(得分:1)

将(系列)命令的结果分配给如下变量:

matchedCount=$(echo "$INDEX" | grep -c '^?? ' &> /dev/null)

然后在需要时调用它:$matchedCount

答案 1 :(得分:0)

在某些语言中,zsh中没有同时分配和测试的运算符,但您不必运行两次操作。而不是测试完整的命令,测试已经分配的变量,然后如果您的测试返回true,则可以准备好变量。如果没有,你没有浪费任何周期。

index_count=$(echo "$INDEX" | grep -c '^?? ' &> /dev/null)
if (( index_count > 0 )); then
    # Do your thing with $index_count
fi

答案 2 :(得分:0)

您可以在算术表达式中执行赋值,并在测试中使用结果。这适用于ksh,bash和zsh。

if ((n = $(echo "$INDEX" | grep -c '^?? ' &> /dev/null))); then
  echo "\$n is not zero"
fi

但是,为了让人们阅读您的代码(包括您在三个月内)的理智,我不建议在测试中包含任务。正如其他人所建议的那样,首先分配给变量,然后测试赋值的结果。

答案 3 :(得分:-1)

你不能,可靠。首先分配,然后测试。