동적 변수 이름이 있는 if 문

동적 변수 이름이 있는 if 문

동적 변수를 만들었습니다.

for (( c=1; c<=2; c++ ))
do  
   eval "prev$c=$number";
done

prev1,prev2

for (( c=1; c<=2; c++ ))
do  
   eval "current$c=$number";
done

current1,current2

변수가 있으면

$prev11
$prev2예 예2
$current11
$current23

루프 내부의 경우와 비교하는 방법은 무엇입니까? 다음은 잘못된 내용입니다. 누군가 구문을 수정할 수 있습니까? 미리 감사드립니다.

for (( c=1; c<=2; c++ ))
do  
 if ((prev$i != current$i)); then
    echo "prev$i is $prev[i] and current$i is $current[i], they are different"
  fi
done

답변1

Bash에서는 변수 간접 참조를 사용할 수 있습니다

    prev=prev$c
    current=current$c

    if ((${!prev} != ${!current})); then
        echo "prev$c is ${!prev} and current$c is ${!current}, they are different"
    fi

그러나 배열을 사용하는 것이 더 안전합니다(평가가 필요하지 않음).

#! /bin/bash
number=0
for (( c=1; c<=2; c++ )) ; do
    prev[c]=$number
    number=$c
    current[c]=$number

    if ((${prev[c]} != ${current[c]})); then
        echo "prev$c is ${prev[c]} and current$c is ${current[c]}, they are different"
    fi
done

관련 정보