Shell 스크립트의 동적 변수에 저장된 콘텐츠 생성

Shell 스크립트의 동적 변수에 저장된 콘텐츠 생성

아래 코드에서 막혔습니다. 도움을 주시면 대단히 감사하겠습니다.

동적으로 생성된 변수 내의 콘텐츠를 다른 변수에 할당하려고 합니다. 하지만 변수 값이 할당되는 것이 아니라 변수 이름이 할당되는 것을 볼 수 있습니다. (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 arraynameBash의 경우)을 사용하세요.

배열의 일부 "객체"에 대해 서로 다른 속성을 갖는 것과 같은 이들의 조합은 더 어렵습니다. 두 개의 개별 배열을 사용한 다음 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}

바라보다:

관련 정보