在bash中使用管道时出现语法错误

时间:2015-06-09 16:25:32

标签: bash pipe heredoc

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

#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

字符串是否在管道之前运行?为什么?为什么要添加&#34; echo&#34;修理它? 第三种方法与第一种方法和第二种方法有何不同?

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

1 个答案:

答案 0 :(得分:3)

你有这个:

$($s1total|bc)

基本上是

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

e.g。运行名为0+....的命令并将其传递给bc

应该是

$(echo $s1total|bc)