Bash - 변수 이름에 변수를 사용하는 방법

Bash - 변수 이름에 변수를 사용하는 방법

예, 예, 아마도 "같은 질문을 하는 사람들이 수백 명이나 있습니다"라고 생각하실 것입니다. 하지만 저는 다음과 같은 작업을 수행하고 싶지 않습니다.

foo="example1"
bar="example2"
foobar="$foo$bar"

나는 이것을하려고 노력하고 있습니다 :

foo="example1"
$foo="examle2"

하지만 이 작업을 시도할 때마다 다음과 같은 오류 메시지가 나타납니다.

bash: example1=example2: command not found

어떤 제안이 있으십니까? 가능합니까?

답변1

여기 몇 가지 예가 있어요.

declare [-g] "${foo}=example2"
declare -n foo='example1'
foo='example2'
eval "${foo}=example2"
mapfile -t "${foo}" <<< 'example2'
printf -v "${foo}" '%s' 'example2'
IFS='' read -r "${foo}" <<< 'example2'
typeset [-g] "${foo}=example2"

다른 사용자들이 말했듯 eval이 일반적으로 간접 할당에 주의하세요.

답변2

을 사용할 수 있습니다 eval.

eval $foo="examle2"

$foo신뢰할 수 있는 가치에 대해 확신을 가지고 있어야 한다는 점에 유의하세요 .

더 나은 대안은 임의의 명령을 실행할 위험이 없도록 인덱스 배열을 사용하는 것입니다.

답변3

suffix=bzz
declare -g prefix_$suffix=mystr

...그런 다음...

varname=prefix_$suffix
echo ${!varname}

뻔뻔하게 훔친여기.

편집: Stephen이 말했듯이 이것은 일반적으로 나쁜 생각이므로 피해야 합니다. 인덱스 배열이 더 나은 선택입니다.

관련 정보