我尝试了几种使用bash命令在for循环中递增的方法。每次$ VAR通过循环时它都会重置。我使用let和不使用let添加了两者的输出。我不确定为什么不使用let不起作用,但它没有?
我的代码写得如下:
echo "Initial value: $VAR"
for file in a b c; do
VAR=$((VAR+1))
echo "Incremented"
done
echo "Final value: $VAR"
但它不能像这样工作:
echo "Initial value: $VAR"
for file in a b c; do VAR=$((VAR+1)) echo "Incremented"; done
echo "Final value: $VAR"
同样,当我使用let
:
for file in a b c; do let VAR++; echo "Incremented"; done
有什么区别?
答案 0 :(得分:2)
问题实际上在于你如何将事情分解成单行。您的代码等同于:
for file in *.dat; do
printf "$file "
if grep -q 'hit' "$file"; then
HITS=$((HITS+1))
echo "hit"
else
MISSES=$((MISSES+1)) echo "miss"
fi
done
了解具体如何
MISSES=$((MISSES+1)) echo "miss"
...所有在一条线上?这是你的错误。添加分号或换行符:
MISSES=$((MISSES+1)); echo "miss"
...前一版本在MISSES
命令的持续时间内在环境中导出echo
的新值,但不会在该范围之外更改它;后者实际上更新了它。