예, 예, 아마도 "같은 질문을 하는 사람들이 수백 명이나 있습니다"라고 생각하실 것입니다. 하지만 저는 다음과 같은 작업을 수행하고 싶지 않습니다.
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이 말했듯이 이것은 일반적으로 나쁜 생각이므로 피해야 합니다. 인덱스 배열이 더 나은 선택입니다.