bash使用操作修改列表

时间:2016-06-22 00:08:38

标签: bash

我试图创建一个将列表中的每个项目除以100的函数,并将输出作为列表返回。有没有办法做这样的事情?

例如:

perform_operation () {
    for num in $1; do
        echo "$num/100" | bc
    done
}

list=$(seq 1 1 10)
new_list=$(perform_operation $list)
echo $new_list

1 个答案:

答案 0 :(得分:1)

Bash数组不是很简单:

https://lukeshu.com/blog/bash-arrays.html

perform_operation () {
    { echo scale=2
    for num; do  #`for something; do` is short for `for something in "$@"; do`
        echo "$num/100" 
    done ; } | bc
}

list=( {1..10} )
new_list=( $(perform_operation "${list[@]}") )
printf ' ->%s\n' "${new_list[@]}"

输出:

 ->.01
 ->.02
 ->.03
 ->.04
 ->.05
 ->.06
 ->.07
 ->.08
 ->.09
 ->.10

从性能角度来看,在循环中启动bc(或任何程序)是一个非常糟糕的主意。尝试尽可能少地调用外部程序并批量传递数据。这是有效的shell脚本的关键。