Bash配列のすべての正の整数を合計する方法。
これは私のコードです。
#!/bin/bash
arr=(2 43 -1 -33 24 12 -6)
for (( i = 0; i < ${#arr[@]}; ++i )); do
if (( arr[i] > 0 )); then
sum=`expr $sum + $i`
fi
done
echo "$sum"
答え1
まず、負でない正の数を選択する必要があります。
if (( arr[i] > 0 )); then
その後、配列を合計する必要があります価値インデックスの代わりに
sum=`expr $sum + ${arr[i]}`
または(すでに(( ... ))
他の場所で算術評価構文を使用しているため)
sum=$((sum + arr[i]))
答え2
#
()で始まるすべての配列要素を何もないものに置き換えるトリックを使用できます-
。
これにより、ループ内でスキャンをスキップできます。
$ arr=( 2 43 -1 -33 24 12 -6 )
$ echo "${arr[@]/#-*}"
2 43 24 12
変更されたスクリプトは次のとおりです。
#!/bin/bash
arr=( 2 43 -1 -33 24 12 -6 )
sum=0
for i in "${arr[@]/#-*}"; do
(( sum+=i ))
done
echo "$sum"
答え3
これは私の新しい試みです。
# 2+43+24+12=81
sum=0
arr=( 2 43 -1 -33 24 12 -6 )
arr=("${arr[@]/-*/0}")
sum=$(IFS=+; echo "$(( ${arr[*]} ))" )
echo "$sum"
81
答え4
awk
楽しんでループにも使用できます。
arr=(2 43 -1 -33 24 12 -6);
sum=$(echo ${arr[*]} | awk '
BEGIN{RS=" "}
$0>0{sum+=$0}
END{print sum}');
echo $sum
81
整数数学以上の作業を行う場合に便利です。
arr=(2 43 -1 -33 24 12 -6);
sqrt=$(echo ${arr[*]} | awk '
BEGIN{RS=" "}
$0>0{sum+=$0}
END{printf "%.2f", sum^0.5}');
echo $sqrt
9.00