O valor da variável de impressão imprime string Script de shell

0

Eu tenho um caso de uso em que poucas variáveis são definidas como

test1="12 33 44 55"
test2="45 55 43 22"
test3="66 54 33 45"

i=1;
while [ $i -le 3 ]; do

      #parse value of test1 test2 test3
      startProcess $test$i
      i=$((i+1))
      done

startProcess () {

    #Should print the complete string which is "12 33 44 55" everytime
     echo $1 
}

Eu preciso passar os valores da variável test1, test2, test3 em loop e fazer um eco completo deles na função.

Por favor, sugira

    
por Archit Goyal 02.07.2018 / 23:04

1 resposta

1

Use uma matriz:

#!/bin/bash

startProcess () {
    printf 'Argument: %s\n' "$1"
}

testarr=( "12 33 44 55" "45 55 43 22" "66 54 33 45" )

for test in "${testarr[@]}"; do
    startProcess "$test"
done

Saída:

Argument: 12 33 44 55
Argument: 45 55 43 22
Argument: 66 54 33 45

Ou use um array associativo (em bash 4.0 +):

#!/bin/bash

startProcess () {
    printf 'Argument: %s\n' "$1"
}

declare -A testarr
testarr=( [test1]="12 33 44 55"
          [test2]="45 55 43 22"
          [test3]="66 54 33 45" )

for test in "${!testarr[@]}"; do
    printf 'Running test %s\n' "$test"
    startProcess "${testarr[$test]}"
done

Saída:

Running test test1
Argument: 12 33 44 55
Running test test2
Argument: 45 55 43 22
Running test test3
Argument: 66 54 33 45
    
por 02.07.2018 / 23:08