bash脚本中的列表累积
如何在bash中进行列表积累,在python中我可以这样做,但在bash中我无论如何都不能让它工作bash脚本中的列表累积,bash,Bash,如何在bash中进行列表积累,在python中我可以这样做,但在bash中我无论如何都不能让它工作 from itertools import accumulate def list_accumulation(lst): output = list(accumulate(map(int,lst))) return output list_accumulation([1,2,3]) >>> [1, 3, 6] 由于bash的函数无法返回list,让我用一组空格分隔的值来
from itertools import accumulate
def list_accumulation(lst):
output = list(accumulate(map(int,lst)))
return output
list_accumulation([1,2,3]) >>> [1, 3, 6]
由于
bash
的函数无法返回list
,让我用一组空格分隔的值来表示它:
#!/bin/bash
list_accumulation() {
local lst i
IFS=" " read -r -a lst <<< "$1"
for (( i = 1; i < ${#lst[@]}; i++ )); do
(( lst[i] += ${lst[i-1]} ))
done
echo "${lst[*]}"
}
list_accumulation "1 2 3"
正如齐奥诺所说,bash函数不能返回list。您可以使用name ref实现类似效果:
#!/usr/bin/env bash
list_accumulation(){
declare -n list_accumulation_internal_list=$1; local i
for (( i = 1; i < ${#list_accumulation_internal_list[@]}; i++ )); do
(( list_accumulation_internal_list[i] += ${list_accumulation_internal_list[i-1]} ))
done
}
list=(1 2 3)
list_accumulation list
echo "${list[@]}"
# 1 3 6
#/usr/bin/env bash
清单(){
声明-n列表\累积\内部\列表=$1;本地i
对于((i=1;i<${#列表(累积)(内部)列表[@]};i++),do
((列表\累积\内部\列表[i]+=${list\累积\内部\列表[i-1]}))
完成
}
列表=(1 2 3)
列表\累积列表
回显“${list[@]}”
# 1 3 6
一个很长的变量list\u contraction\u internal\u list
用于避免与外部变量表的名称冲突
#!/usr/bin/env bash
list_accumulation(){
declare -n list_accumulation_internal_list=$1; local i
for (( i = 1; i < ${#list_accumulation_internal_list[@]}; i++ )); do
(( list_accumulation_internal_list[i] += ${list_accumulation_internal_list[i-1]} ))
done
}
list=(1 2 3)
list_accumulation list
echo "${list[@]}"
# 1 3 6