我试图创建一个将列表中的每个项目除以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
答案 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脚本的关键。