다음과 같이 정의된 변수가 거의 없는 사용 사례가 있습니다.
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
}
루프에서 test1, test2, test3 변수 값을 전달하고 함수에 정확하게 반영해야 합니다.
제안해주세요
답변1
배열을 사용하십시오:
#!/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
산출:
Argument: 12 33 44 55
Argument: 45 55 43 22
Argument: 66 54 33 45
또는 연관 배열( 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
산출:
Running test test1
Argument: 12 33 44 55
Running test test2
Argument: 45 55 43 22
Running test test3
Argument: 66 54 33 45