zoukankan      html  css  js  c++  java
  • Shell替换数组元素之间的间隔符号

    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

  • 相关阅读:
    grpc xservice 使用
    modsecurity3.0 nginx 安装
    scrapy docker 基本部署使用
    fabio 安装试用&&实际使用的几个问题
    yugabyte cloud native db 基本试用
    coredns 编译模式添加插件
    gradle 项目构建以及发布maven 私服&& docker 私服构建发布
    groovy gradle 构建配置
    groovy && java 混编 gradle 配置
    gradle 构建包含源码配置
  • 原文地址:https://www.cnblogs.com/ranwuer/p/8362489.html
Copyright © 2011-2022 走看看