아래 코드가 붙어 있는데 도움을 주시면 대단히 감사하겠습니다.
동적으로 생성된 변수 내부의 내용을 다른 변수에 할당하려고 합니다. 그런데 변수의 값이 할당되는 대신 변수 이름이 할당되는 것을 볼 수 있었습니다. (echo/eval/!) 시도했지만 아무것도 작동하지 않습니다. 누군가 솔루션을 도와 주시겠습니까?
목표: 값 24를 할당하려면(변수 아래에 저장됨)msd_ext_len) 에게final_count변하기 쉬운.
변수 선언
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]
및 를 사용할 수 있습니다 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의 페이지 배열(하단의 연관 배열)