아래 코드에서 막혔습니다. 도움을 주시면 대단히 감사하겠습니다.
동적으로 생성된 변수 내의 콘텐츠를 다른 변수에 할당하려고 합니다. 하지만 변수 값이 할당되는 것이 아니라 변수 이름이 할당되는 것을 볼 수 있습니다. (echo/eval/!) 시도했지만 아무것도 작동하지 않았습니다. 누구든지 문제 해결을 도와줄 수 있나요?
목적: 값 24 지정(변수에 저장)msd_ext_len) 도착하다최종 카운트바꾸다.
변수 선언
iter_val=1
var_1="msd_ext"
msd_ext_len=24
암호:
eval "final_count"=\${var_${iter_val}}_len
출력 -->msd_ext_len
예상 출력 -->24
위 코드와 함께 코드 한 줄(아래 표시)을 더 추가하면 다음과 같은 결과가 출력됩니다.
count_val=${!final_count}
그런데 이 두 줄의 코드를 하나로 결합할 수 있을까요?
답변1
따라서 먼저 다음과 같은 작업을 수행할 때마다 ${var_${iter_val}}
(예: 변수 이름에 숫자를 추가하려는 경우) 배열을 사용해야 합니다.
arr=(a b c)
arr[1]=x
i=1
echo "${arr[i]}"
색인을 생성해야 하는 경우끈대신 연관 배열( declare -A arrayname
Bash의 경우)을 사용하세요.
배열의 일부 "객체"에 대해 서로 다른 속성을 갖는 것과 같은 이들의 조합은 더 어렵습니다. 두 개의 개별 배열을 사용한 다음 foo[i]
sum 을 사용할 수 있습니다 bar[i]
.
여전히 이름으로 이러한 배열을 간접적으로 가리켜야 하는 경우 이름 참조가 필요합니다.
foo=(a b c)
bar=(x y z)
declare -n arrname=foo
echo "${arrname[i]}"
귀하의 코드에서 귀하의 데이터 구조가 정확히 무엇인지 알 수 없으므로 이 경우에 대한 답변을 제공하기가 어렵습니다.
예제를 다시 작성해 보세요. 다음을 수행할 수 있습니다.
varnames=()
varnames[1]=msd_ext
varnum=1
msd_ext_len=24
declare -n srcvar="${varnames[varnum]}_len"
declare -n dstvar=final_count
dstvar=$srcvar
echo $final_count
중첩된 확장이 실제로 작동하지 않기 varnames
때문에 여전히 배열을 사용해야 합니다 .${var_$foo}
바라보다:
- Bash는 포인터 사용을 지원합니까?
- BashGuide의 배열 페이지(하단 연관배열)