Shell中的数组是这样表示的:

  arr=(1,2,3,4,5)

它们数组元素的间隔符号为逗号,如果我相把逗号替换为加号:

  echo ${arr//,/+}

输出:

  1+2+3+4+5

这个表达式是我在hackerrank上看到的。原题是,输入几个数字,然后求它们的平均数,以下是代码:

#!/bin/bash
# 输入几个数字并计算出平均值
# 第一个数字表示需要计算多少个数字
# 计算平均数的时候从第2位开始直到结束
# 如果输入
# 4
# 1
# 2
# 9
# 8
# 则结果为
# 5.000 read n
arr=($(cat))
arr=${arr[*]}
printf "%.3f" $(echo $((${arr// /+}))/$n | bc -l)

  

arr=($(cat)) 表示运行cat命令后,用户可以输入任意多个数字,这里的输入格式是:输入一个数字后按回车,然后输入第二个数字,直到输入4个数字,并按下Ctrl+D结束输入。

这样,arr会收到4个数字。表示为:arr=(1,2,9,8),它们之间用逗号分隔。

arr=${arr[*]}会将arr转为以空格分隔的数组 arr=(1 2 9 8),全文最核心的一句 $(echo $((${arr// /+}))/$n | bc -l) 意思是将arr数组转为以加号为间隔符的数组,展开后为:

  $(echo 1+2+9+8/4 | bc -l)

将这个算数表达式交给bc来计算,得出的结果为 3.750 。注意一下bc -l 参数,-l 表示使用数学库,它默认可以保持20位的精度。

最后修改:2018-01-27 10:29

最新文章

  1. 编写简单的ramdisk(无请求队列)
  2. 入住cnblogs第一篇随笔 Hello, world!
  3. 弄个知乎的粒子动态背景_实践particles.js
  4. VS2012打包Winform教程 [转]
  5. Android加载大图片OOM异常解决
  6. js 弹出div窗口 可移动 可关闭 (转)
  7. jedis入门实例
  8. Css基础-介绍及语法
  9. CentOS7安装Puppet+GitLab+Bind
  10. LINQ 101——约束、投影、排序
  11. Bootstrap_表单_图像
  12. Eclipse用法和技巧十九:eclipse修改workspace
  13. copy_part_stat.sql
  14. 用matlab给图像加高斯噪声和椒盐噪声(不调用imnoise函数)
  15. 【Alpha 阶段】后期测试及补充(第十一、十二周)
  16. wx.navigateBack(OBJECT)怎么携带参数呢?
  17. 基于CRF的中文分词
  18. 使用graphql-code-generator 生成graphql 代码
  19. radiobutton 选中的项不能去掉选择的问题
  20. 20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告

热门文章

  1. [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制
  2. 664A - Complicated GCD
  3. keepalived 原理、安装与使用
  4. python 的多线程执行速度
  5. (五)SpringBoot如何定义全局异常
  6. pyrcharm 编程规范
  7. PAT 1035 插入与归并(25)
  8. Subsequence HDU - 3530
  9. 贪心+拓扑排序 AOJ 2456 Usoperanto
  10. ogg 监控脚本