2

ループ内で配列値をインクリメントするのに助けが必要です。問題は、変数がすべて同じで、"Numbers" 配列の 2 番目の要素がインクリメントされていないことです。

#!/bin/bash

Duration=60

declare -a Numbers=("5" "10")

for (( d=1 ; d<=$Duration ; d++ ))
do

  for (( i=0 ; i<${#Numbers[@]} ; i++ ))
  do

        if [ "$MYVALA" == "" ]; then
                MYVALA=${Numbers[i]}
        else
                MYVALA=$(($MYVALA+1))
        fi ;

        echo ""
        echo "number: ${Numbers[i]}"
        echo "-------------"
        echo "new value = $MYVALA"
  done ;
  sleep 1 ;
done ;

これは上記のコードの結果です:

number: 5
-------------
new value = 5

number: 10
-------------
new value = 6

number: 5
-------------
new value = 7

number: 10
-------------
new value = 8

私が取得したいのは次のとおりです。

number: 5
-------------
new value = 6

number: 10
-------------
new value = 11

number: 5
-------------
new value = 7

number: 10
-------------
new value = 12
...

数字の 5 と数字の 10 は同時に、1 秒に 1 回印刷されます。

ご協力いただきありがとうございます。

4

2 に答える 2

1

これにより、必要な出力が生成されます。新しい値は、単純に数値に期間を加えたものです。

#!/bin/bash

Duration=60
Numbers=(5 10)

for (( d=1 ; d<=Duration ; d++ )) ; do
  for (( i=0 ; i<${#Numbers[@]} ; i++ )) ; do
      let MYVALA=Numbers[i]+d
      echo
      echo "number: ${Numbers[i]}"
      echo '-------------'
      echo "new value = $MYVALA"
  done
  sleep 1
done
于 2013-01-30T21:11:53.457 に答える
0

配列値をインクリメントするには、 を使用します(( myarray[i]++ ))。記述した値をスクリプトに出力させるには、数値ごとに個別のカウンターの配列を保持できます。

#!/bin/bash

Duration=60

declare -a Numbers=("5" "10")
Counters=( "${Numbers[@]}" )

for (( d=1 ; d<=$Duration ; d++ ))
do

  for (( i=0 ; i<${#Numbers[@]} ; i++ ))
  do
        (( Counters[i]++ ))
        echo ""
        echo "number: ${Numbers[i]}"
        echo "-------------"
        echo "new value = ${Counters[i]}"
  done ;
  sleep 1 ;
done
于 2013-01-30T21:12:05.263 に答える