在 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)
我在没有任何经验的情况下一头扎进 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)