[unix] bash 동적 (변수) 변수 이름

요소 배열을 조작하여 일련의 문자열을 동적으로 만들고 일부 산술 절차를 만들고 싶습니다.

for name in FIRST SECOND THIRD FOURTH FIFTH; do
    $name = $(( $6 + 1 ))
    $name = "${$name}q;d"
    echo "${$name}"; printf "\n"
done

욕망 결과는 다음과 $6같습니다 0.

1q;d
2q;d
3q;d
4q;d
5q;d

하지만이 오류가 발생합니다

reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution

간단한 것 같아요. 내가 뭔가를했을 때 작동하는 데 사용

FIRST=$(( $6 + 1 ))
FIRST="${FIRST}q;d"



답변

우선 =에 변수 선언에 공백이있을 수 없습니다 bash.

원하는 것을 얻으려면을 사용할 수 있습니다 eval.

예를 들어 당신과 같은 샘플 스크립트 :

#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
    eval "$name"="'$(( $i + 1 ))q;d'"
    printf '%s\n' "${!name}"
    i=$(( $i + 1 ))
done

인쇄 :

1q;d
2q;d
3q;d
4q;d
5q;d

eval신중하게 사용하면 , 어떤 사람들은 정당한 이유로 그것을 악이라고 부릅니다.

declare 너무 작동합니다 :

#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
    declare "$name"="$(( $i + 1 ))q;d"
    printf '%s\n' "${!name}"
    i=$(( $i + 1 ))
done

또한 인쇄 :

1q;d
2q;d
3q;d
4q;d
5q;d


답변

다른 변수에 이름을 저장 한 상태에서 bash 변수를 참조하려면 다음과 같이하십시오.

$ var1=hello
$ var2=var1
$ echo ${!var2}
hello

이 경우 var2에 액세스하려는 변수의 이름을 저장합니다. 그런 다음 액세스 하려는 변수의 이름을 보유한 변수가있는 ${!<varable name>}위치 <variable name>로 액세스하십시오.


답변

index=0;                                                                                                                                                                                                           
for name in FIRST SECOND THIRD FOURTH FIFTH; do
    name=$(($index + 1))
    echo "${name}q;d"
    index=$((index+1))
done

당신이 시도하는 것입니까?


답변

코드와 원하는 출력에서 ​​얻은 것 (잘못된 경우 수정) :
“FIRST”/ “SECOND”/ … 변수 이름을 사용하지 않고 인덱스가있는 루프가 필요합니다. .

이것은 일을 할 것입니다 :

for i in {1..5} ; do echo $i"q;d" ; done


답변