我有以下if子句:
if $(echo "$INDEX" | grep -c '^?? ' &> /dev/null) > 0 ;
输出与grep表达式匹配的字符串数。如何将该计数分配给if子句中的变量,以便我不必执行该命令两次来获取字符串数?
答案 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)
你不能,可靠。首先分配,然后测试。