Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在BASH中实现平均函数的奇特方法?_Bash_Function_Shell - Fatal编程技术网

在BASH中实现平均函数的奇特方法?

在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{

我对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{
        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的技巧,但通常很慢。