在BASH中实现平均函数的奇特方法?
我对shell脚本编程非常陌生 我想在bash中实现一个平均函数,并且已经搜索过了,但是还没有任何精确的方法来实现它 我想做的是: 方法1:在BASH中实现平均函数的奇特方法?,bash,function,shell,Bash,Function,Shell,我对shell脚本编程非常陌生 我想在bash中实现一个平均函数,并且已经搜索过了,但是还没有任何精确的方法来实现它 我想做的是: 方法1: function avg(item_1, item_2, item_3){ if(item_2 == null and item_3){ return item_1 }else if(item_3 == null){ return (item_1 + item_2) / 2 }else{
function avg(item_1, item_2, item_3){
if(item_2 == null and item_3){
return item_1
}else if(item_3 == null){
return (item_1 + item_2) / 2
}else{
return (item_1 +item_2 + item_3)/3
}
}
function avg(item[]){
return sum(item)/item.length
}
或如有可能:
方法2:
function avg(item_1, item_2, item_3){
if(item_2 == null and item_3){
return item_1
}else if(item_3 == null){
return (item_1 + item_2) / 2
}else{
return (item_1 +item_2 + item_3)/3
}
}
function avg(item[]){
return sum(item)/item.length
}
有没有人能想出一个好办法
谢谢你的帮助 Bash只知道整数运算,所以最好使用外部工具进行计算。在这里,我使用了
bc
:
#!/bin/bash
avg () {
local IFS=+
echo $(bc -l <<< "($*) / $#")
}
avg 2 2.25 3.1
#/bin/bash
平均值(){
本地国际单项体育联合会=+
echo$(bc-lBash只知道整数算术,所以最好使用外部工具进行计算
#!/bin/bash
avg () {
local IFS=+
echo $(bc -l <<< "($*) / $#")
}
avg 2 2.25 3.1
!/bin/bash
平均值(){
本地国际单项体育联合会=+
echo$(bc-lBash只知道整数算术,所以最好使用外部工具进行计算
#!/bin/bash
avg () {
local IFS=+
echo $(bc -l <<< "($*) / $#")
}
avg 2 2.25 3.1
!/bin/bash
平均值(){
本地国际单项体育联合会=+
echo$(bc-lBash只知道整数算术,所以最好使用外部工具进行计算
#!/bin/bash
avg () {
local IFS=+
echo $(bc -l <<< "($*) / $#")
}
avg 2 2.25 3.1
!/bin/bash
平均值(){
本地国际单项体育联合会=+
回音$(bc-l)你有没有为此做过尝试?在本网站上询问问题之前,你通常会做出一些努力来解决我们的问题。你有没有为此做过尝试?在本网站上询问问题之前,你通常会做出一些努力来解决我们的问题。你有没有为此做过尝试?你是的在本网站上询问问题之前,通常希望您做出一些努力来解决我们的问题。您为此做过任何尝试吗?在本网站上询问问题之前,通常希望您做出一些努力来解决我们的问题。只需使用local IFS=+
,这样您就不必担心如何正确还原IFS
(即使在调用avg
之前未设置,您的代码也会设置IFS
。对于POSIX,您有时可以使用子shell作为函数体(avg()(IFS=+;…)
)来解决缺少local
)@切普纳:谢谢,更新了。我不知道IFS可以本地化。我知道子shell技巧,但通常速度很慢。只需使用local IFS=+
,就不必担心正确还原IFS
(即使在调用avg
之前未设置,您的代码也会设置IFS
。对于POSIX,您有时可以使用子shell作为函数体(avg()(IFS=+;…)
)来解决缺少local
)@切普纳:谢谢,更新了。我不知道IFS可以本地化。我知道子shell技巧,但通常速度很慢。只需使用local IFS=+
,就不必担心正确还原IFS
(即使在调用avg
之前未设置,您的代码也会设置IFS
。对于POSIX,您有时可以使用子shell作为函数体(avg()(IFS=+;…)
)来解决缺少local
)@切普纳:谢谢,更新了。我不知道IFS可以本地化。我知道子shell技巧,但通常速度很慢。只需使用local IFS=+
,就不必担心正确还原IFS
(即使在调用avg
之前未设置,您的代码也会设置IFS
。对于POSIX,您有时可以使用子shell作为函数体(avg()(IFS=+;…)
)来解决缺少local
)@谢普纳:谢谢,更新了。我不知道IFS可以本地化。我知道subshell的技巧,但通常很慢。