arrays - 如何在数组bash脚本中附加每个变量
问题描述
我想按照顺序将每个条件内的变量值附加到数组中,即这里首先是 60s,然后是 59.8S,最后是 30.8NI 想要添加元素通过我的代码,只有最后 4 个元素被附加到数组中。
#!/bin/bash
for i in $(seq -60 1 30);do
nextint=$((i+1))
sum=$((i+nextint))
mid=`echo "$sum / 2" | bc -l`
sum=`echo $i + $mid | bc`
topmid=`echo "$sum / 2" | bc -l`
sum=`echo $mid + $nextint | bc`
bottommid=`echo "$sum / 2" | bc -l`
k=0.0
#printf "$i%.*f\n$topmid%.*f\n$mid%.*f\n$bottommid%.*f\n"
# "$topmid $mid $bottommid"
#printf "%.*f\n" $i $topmid $mid $botttommid
n='N'
s='S'
array=()
if (( $(echo "$i == $k" | bc -l) )); then
i=$( printf "%.f\n" "$i")
topmid=$(printf "%.1f\n" "$topmid")
mid=$(printf "%.1f\n" "$mid")
bottommid=$( printf "%.1f\n" "$bottommid")
topmid=$topmid$n
mid=$mid$n
bottommid=$bottommid$n
echo "$i"
echo "$topmid"
echo "$mid"
echo "$bottommid"
array+=("$i")
array+=("$topmid")
array+=("$mid")
array+=("$bottommid")
# echo "${array[@]}"
#fi
#done
elif (( $( echo "$i > $k" |bc -l ) ))
#n='N'
then
i=$( printf "%.f\n" "$i")
topmid=$(printf "%.1f\n" "$topmid")
mid=$(printf "%.1f\n" "$mid")
bottommid=$( printf "%.1f\n" "$bottommid")
i=$i$n
topmid=$topmid$n
mid=$mid$n
bottommid=$bottommid$n
echo "$i"
# eco "${array[@]}"
echo "$topmid"
echo "$mid"
echo "$bottommid"
array+=("$i")
array+=("$topmid")
array+=("$mid")
array+=("$bottommid")
else
#s='S'
<<com
printf "%.f\n" "$i"
printf "%.1f\n" "$topmid"
printf "%.1f\n" "$mid"
printf "%.1f\n" "$bottommid"
com
i=$( printf "%.f\n" "$i")
topmid=$(printf "%.1f\n" "$topmid")
mid=$(printf "%.1f\n" "$mid")
bottommid=$( printf "%.1f\n" "$bottommid")
i=$(echo $i$s| sed 's/-//g')
topmid=$(echo $topmid$s | sed 's/-//g')
mid=$(echo $mid$s | sed 's/-//g')
bottommid=$(echo $bottommid$s | sed 's/-//g')
echo "$i"
echo "$topmid"
echo "$mid"
echo "$bottommid"
array+=(" $i")
array+=(" $topmid")
array+=(" $mid")
array+=("$bottommid")
fi
done
echo "${array[*]}"
echo "${#array[@]}"
输出为 --- 60S 59.8S 59.5S 59.2S 59S 58.8S 58.5S 58.2S 58S ..... 28.8N 29N 29.2N 29.5N 29.8N 30N 30.2N 30.5N 30.8N 30N 30.2N 40.5N 30.8N
我希望将整个变量值数组作为序列中的元素 60N 59.8N .... 30N 30.2N 30.5N 30.8N
TIA.** 我希望数组到整个变量值作为序列中的元素 60N 59.8N ....... 30N 30.2N 30.5N 30.8N **
解决方案
移出array=()
循环:
#!/bin/bash
array=()
for i in $(seq -60 1 30);do
nextint=$((i+1))
sum=$((i+nextint))
mid=`echo "$sum / 2" | bc -l`
sum=`echo $i + $mid | bc`
topmid=`echo "$sum / 2" | bc -l`
sum=`echo $mid + $nextint | bc`
bottommid=`echo "$sum / 2" | bc -l`
k=0.0
#printf "$i%.*f\n$topmid%.*f\n$mid%.*f\n$bottommid%.*f\n"
# "$topmid $mid $bottommid"
#printf "%.*f\n" $i $topmid $mid $botttommid
n='N'
s='S'
if (( $(echo "$i == $k" | bc -l) )); then
i=$( printf "%.f\n" "$i")
topmid=$(printf "%.1f\n" "$topmid")
mid=$(printf "%.1f\n" "$mid")
bottommid=$( printf "%.1f\n" "$bottommid")
topmid=$topmid$n
mid=$mid$n
bottommid=$bottommid$n
echo "$i"
echo "$topmid"
echo "$mid"
echo "$bottommid"
array+=("$i")
array+=("$topmid")
array+=("$mid")
array+=("$bottommid")
# echo "${array[@]}"
#fi
#done
elif (( $( echo "$i > $k" |bc -l ) ))
#n='N'
then
i=$( printf "%.f\n" "$i")
topmid=$(printf "%.1f\n" "$topmid")
mid=$(printf "%.1f\n" "$mid")
bottommid=$( printf "%.1f\n" "$bottommid")
i=$i$n
topmid=$topmid$n
mid=$mid$n
bottommid=$bottommid$n
echo "$i"
# eco "${array[@]}"
echo "$topmid"
echo "$mid"
echo "$bottommid"
array+=("$i")
array+=("$topmid")
array+=("$mid")
array+=("$bottommid")
else
#s='S'
<<com
printf "%.f\n" "$i"
printf "%.1f\n" "$topmid"
printf "%.1f\n" "$mid"
printf "%.1f\n" "$bottommid"
com
i=$( printf "%.f\n" "$i")
topmid=$(printf "%.1f\n" "$topmid")
mid=$(printf "%.1f\n" "$mid")
bottommid=$( printf "%.1f\n" "$bottommid")
i=$(echo $i$s| sed 's/-//g')
topmid=$(echo $topmid$s | sed 's/-//g')
mid=$(echo $mid$s | sed 's/-//g')
bottommid=$(echo $bottommid$s | sed 's/-//g')
echo "$i"
echo "$topmid"
echo "$mid"
echo "$bottommid"
array+=(" $i")
array+=(" $topmid")
array+=(" $mid")
array+=("$bottommid")
fi
done
echo "${array[*]}"
echo "${#array[@]}"
实际上,您在循环的每一位都清空它,并且最多设置 4 个值。set -x
非常适合诊断这些类型的问题。
用于https://www.shellcheck.net/
检查您的代码。最佳实践等等。
推荐阅读
- android - Firebase 视频到 videoview 不起作用
- html - 使 SVG 等宽
里面的元素 - spring-integration - 如何通知我的应用程序(生产者)它被 ActiveMQ 服务器阻止?
- pdf - 如何使用 nameddest 将 DOCX 转换为 PDF 以在 FireFox 和 Chrome 中链接
- phpunit - Does a global phpunit check for local version?
- sql-server - 存储过程并没有真正返回任何东西
- javascript - 即使禁用 JS,如何防止按钮访问?
- javascript - 如何将本地存储添加到我的待办事项 vue.js?
- r - R散点图警告消息“不是图形参数”
- c# - 通过asp net mvc控制器将文件application.pdf返回到浏览器显示代码而不是文件