在 bash 中使用管道语法错误

Syntax error with use of pipe in bash

我在没有任何经验的情况下一头扎进 bash 并且遇到了一些障碍:我写了一个小的 bash 脚本来确定值的平均值(它只是一个总和现在)由 c 可执行文件返回。

#Sample value of #s1total: 0+0.000117+0.000149+0.000106

printf "\n%s" $s1total

#The following line works
printf "\nTotal: %s\n" $(bc <<< $s1total)

#the following also works
echo
echo -n "Total: "
echo $s1total | bc

#The following line does not work
printf "\nTotal: %s\n" $($s1total|bc)

我最终发现最后一行可以通过将其更改为 $(echo $s1total|bc) 来工作,但我不明白为什么会这样...

如果我按原样 运行,我会得到一个错误:./sievetest.sh: line 25: 0+0.000117+0.000149+0.000106: command not found

字符串是在管道之前 运行 吗?为什么?为什么添加 "echo" 可以解决问题? 第三种方法与第一种和第二种方法有何不同?

(顺便说一句,我认为 heredoc 重定向运算符是 << ,为什么额外的 < ?)

你有这个:

$($s1total|bc)

这基本上是

$(0+0.000117+0.000149+0.000106 | bc)

例如运行 一个名为 0+.... 的命令并将其通过管道传输到 bc.

应该是

$(echo $s1total|bc)