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