변수 - 연합

변수 - 연합
FICH10=primero.sh
FICH20=segundo.sh

for i in 10 20
do
   echo $FICH($i)  # I want resolved first $i and then resolver var FICH10
done

$i먼저 해결 하고 해안선에 연결하여 FICHor의 값을 반환하지만 숫자를 입력할 필요가 없지만 루프를 통해 해결되기를 원합니다.$FICH10$FICH20

관련 응답을 해결하지 못했습니다.

$ for i in 10 20
> do
> echo $((FICH$i))
> done
ksh: line 3: primero: parameter not set

답변1

변수 간접 사용:

#!/bin/bash
fich10=primero.sh
fich20=segundo.sh

for i in 10 20 ; do
    var=fich$i
    echo ${!var}
done

참고 변수 이름은 시스템 변수가 아니기 때문에 작은 대문자를 사용하고 있습니다.

답변2

Bash 버전 4.3+의 경우 "nameref"를 사용할 수 있습니다.

for i in 10 20; do
    declare -n var="FICH$i"
    echo "$var"
done

변수 대체의 두 번째 라운드를 강제하는 데 사용할 수 있지만 eval보시다시피 이것이 필수는 아닙니다. eval일반적으로 대부분의 상황에서 사용하기에는 너무 위험한 것으로 간주됩니다.

관련 정보