• 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

  • 相关阅读:
    java.util.Dictionary源码分析
    java.util.HashMap源码分析
    公钥密码与数字签名
    迭代器模式(Iterator Pattern)
    EIGamal密码体制
    RSA安全性问题
    观察者模式(Observer Pattern)
    不对称密钥密码体系之RSA
    大道至简第七章读后感
    产生随机数
  • 原文地址:https://www.cnblogs.com/ranwuer/p/8362489.html
Copyright © 2020-2023  润新知