簡體   English   中英

BASH數組中所有元素的算術運算

[英]Arithmetic operation on all elements in BASH array

假設我們有一個帶有整數的BASH數組:

declare -a arr=( 1 2 3 )

並且我想對每個元素進行算術運算,例如加1。for循環是否有替代方法:

for (( i=0 ; i<=${#arr[@]}-1 ; i++ )) ; do
    arr[$i]=$(( ${arr[$i]} + 1 ))
done

我嘗試了幾種選擇:

arr=$(( ${arr[@]} + 1 ))

失敗,而

arr=$(( $arr + 1 ))

結果是

echo ${arr[@]}
2 2 3

因此,僅第一個(零個)元素被更改。

我閱讀了有關awk解決方案的信息,但想知道BASH算術是否支持每個數組元素上的此類批處理操作。

我知道您的問題不是新鮮事物,但是您可以通過將數組聲明為integer然后應用替換來完成所需的工作:

declare -ia arr=( 1 2 3 )
value=1

declare -ia 'arr_added=( "${arr[@]/%/+$value}" )'
echo "arr_added: ${arr_added[*]}"

value=42
declare -ia 'arr_added=( "${arr[@]/%/+$value}" )'
echo "arr_added: ${arr_added[*]}"

它輸出:

arr_added: 2 3 4
arr_added: 43 44 45

您還可以執行其他數學運算:

value=3
declare -ia 'arr_multd=( "${arr[@]/%/*$value}" )'
echo "arr_multd: ${arr_multd[*]}"

輸出:

arr_multd: 3 6 9

您可以使用eval來感受lambda函數(不確定語法,但這應該是主要思想):

eval "function add1 { x=$1; y=$((x+1)) ; return $y; }"
for (( i=0 ; i<=${#arr[@]}-1 ; i++ )) ; do
    add1 ${arr[i]}
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM