在bash中添加数字(在zsh中工作)

在bash中添加数字(在zsh中工作),bash,shell,Bash,Shell,为什么 sum=0; for i in 1 2 3 4; do echo "$i" | sum=$((sum+i)); done; echo $sum 。。。在zsh中按预期工作,但不在bash中工作?也许是因为bash不支持浮点运算?我也试过 sum=0; for i in 1 2 3 4; do echo "$i" | awk '{sum+=$1}'; done; echo $sum 。。。但这两种方法都不起作用(这在macOS 10.14.2上)。我发现了几个相关的问题(如or),但这

为什么

sum=0; for i in 1 2 3 4; do echo "$i" | sum=$((sum+i)); done; echo $sum
。。。在
zsh
中按预期工作,但不在
bash
中工作?也许是因为bash不支持浮点运算?我也试过

sum=0; for i in 1 2 3 4; do echo "$i" | awk '{sum+=$1}'; done; echo $sum
。。。但这两种方法都不起作用(这在macOS 10.14.2上)。我发现了几个相关的问题(如or),但这个问题仍然存在。

有一个错误“|”

第二个示例不起作用,因为每次重复循环时都调用awk,因此不会存储sum的值。

有一个错误的“|”


第二个示例不起作用,因为您每次重复循环时都调用awk,因此不会存储sum的值。

请参见as指出的,第一个示例不起作用的原因是因为变量是。如前所述,第一个问题不起作用的原因是因为变量是无效的。有关同一问题的更常见症状,请参见如果变量“i”未知(如第二个示例中所示),该怎么办?那么,您将如何添加到
sum
中呢?。。。这就是为什么我“管道化”(这只是一个MWE,
I
实际上是一个先前执行的命令的输出)管道化到什么?赋值没有回音是正确的。@Mariushofer只需先将其放入变量中,例如
i=$(您的长命令)
@Mariushofer我认为您在MWE中遗漏了太多内容。在第一个示例中,永远不会读取
echo
ed的值,并且对求和没有影响。在第二个示例中,
sum
是一个
awk
变量,而不是一个shell变量,并且由于每次运行一个新的
awk
时,它在循环中都是一个完全不同的变量。您需要包含更多您实际尝试执行的操作。如果变量“i”未知(如第二个示例中所示),该怎么办?那么,您将如何添加到
sum
中呢?。。。这就是为什么我“管道化”(这只是一个MWE,
I
实际上是一个先前执行的命令的输出)管道化到什么?赋值没有回音是正确的。@Mariushofer只需先将其放入变量中,例如
i=$(您的长命令)
@Mariushofer我认为您在MWE中遗漏了太多内容。在第一个示例中,永远不会读取
echo
ed的值,并且对求和没有影响。在第二个示例中,
sum
是一个
awk
变量,而不是一个shell变量,并且由于每次运行一个新的
awk
时,它在循环中都是一个完全不同的变量。你需要包含更多你真正想做的事情。
sum=0; for i in 1 2 3 4; do echo "$i" ; sum=$((sum+i)); done; echo $sum  
1
2
3
4
10