Shell Script의 동적 변수에 저장된 콘텐츠 생성

Shell Script의 동적 변수에 저장된 콘텐츠 생성

아래 코드가 붙어 있는데 도움을 주시면 대단히 감사하겠습니다.

동적으로 생성된 변수 내부의 내용을 다른 변수에 할당하려고 합니다. 그런데 변수의 값이 할당되는 대신 변수 이름이 할당되는 것을 볼 수 있었습니다. (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 arraynameBash의 경우)을 사용하세요.

예를 들어 배열의 일부 "객체"에 고유한 속성을 갖는 것의 조합은 더 어렵습니다. 두 개의 별도 배열을 사용한 다음 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}실제로 작동하지 않기 때문에 여전히 배열을 사용해야 합니다 .

보다:

관련 정보