gpt4 book ai didi

linux - 通过 while 比较循环遍历数组

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:11 26 4
gpt4 key购买 nike

我正在尝试遍历数组并递增一个值。

这是我的代码。

#!/bin/bash -e

# set -x

GASLIMIT=8000000
LIMIT=268435456000000
VM_FAMILY_ARRAY=(t2.xlarge t2.2xlarge t3a.xlarge t3a.2xlarge a1.4xlarge a1.metal m4.xlarge m4.2xlarge m5.4xlarge m5.8xlarge m5.12xlarge m5.16xlarge m5.24xlarge m5.metal)


for i in "${VM_FAMILY_ARRAY[@]}"
do
while [ $GASLIMIT -le "$LIMIT" ]
do
echo "$i""$GASLIMIT"
GASLIMIT=$(($GASLIMIT*2))
done

done

我希望脚本的输出看起来像这样:

t2.xlarge8000000
<!--SNIP-->
t2.xlarge268435456000000
m5.metal8000000
<!-SNIP->
m5.metal268435456000000

我现在得到的只是 VM_FAMILY 数组 (t2.xlarge) 的第一个成员,一旦达到 $LIMIT

脚本就会退出
t2.xlarge8000000
t2.xlarge16000000
<!--SNIP-->
t2.xlarge67108864000000
t2.xlarge134217728000000
t2.xlarge268435456000000

我会很感激这方面的指点

最佳答案

您的 GASLIMIT 变量不会在您的 for 循环中重置为其“基本”值。

因此,在您的第一个 for 迭代之后,GASLIMIT 已经大于 LIMIT 并且您的 while 循环永远不会跑。

#! /usr/bin/env bash

set -eu

LIMIT=268435456000000
VM_FAMILY_ARRAY=(t2.xlarge t2.2xlarge t3a.xlarge t3a.2xlarge a1.4xlarge a1.metal m4.xlarge m4.2xlarge m5.4xlarge m5.8xlarge m5.12xlarge m5.16xlarge m5.24xlarge m5.metal)

for i in "${VM_FAMILY_ARRAY[@]}"
do
GASLIMIT=8000000
while [ $GASLIMIT -le "$LIMIT" ]
do
echo "$i""$GASLIMIT"
GASLIMIT=$(($GASLIMIT*2))
done
done

关于linux - 通过 while 比较循环遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58431450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com