숫자 문제가 포함된 BASH 변수 이름

숫자 문제가 포함된 BASH 변수 이름

숫자가 포함된 변수를 사용하여 문제가 발생했습니다.

이것은 작동합니다.

sourceid_2="blah"
echo $sourceid_2

그러나 이것은 작동하지 않습니다.

sourceid_2="blah"
i=2
echo $sourceid_$i

이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 밑줄 없이 시도했지만.. 도움이 되지 않았습니다.

내 최종 목표는 for i in {2..7} 루프의 변수를 사용하여 다음과 같이 작업을 수행하는 것입니다.

for i in {2..7}
do
echo $sourceid_$i
done

답변1

echo $sourceid_$i두 개의 개별 변수인 $sourceid_및 를 확장합니다 $i. 수행하려는 작업을 수행하는 가장 간단한 방법은 간접 참조를 사용하는 것입니다.

sourceid_2="blah"
i=2
var=sourceid_$i
echo "${!var}"

그러나 @dave_thompson_085가 지적했듯이 배열은 일반적으로 이런 종류의 작업을 수행하는 더 좋은 방법입니다.

declare -a sourceid
sourceid[2]="blah"
i=2
echo "${sourceid[i]}"

배열은 bash 확장이며 더 기본적인 셸에서는 사용할 수 없습니다.

답변2

문제는 숫자가 포함된 이름이 아니라 잘 작동하지만변하기 쉬운. 당신은 eval(올바르게 하기 어렵고 망치기 쉬운) 또는 간접적인 방법을 사용할 수 있습니다. x=source_$i; echo "${!x}"어떤 경우에는 이것이 속임수입니다.이름에 변수가 있는 bash 배열SX는 이미 사용자가 볼 수 있도록 관련 목록에 자동으로 추가했습니다.

그러나 숫자로 여러 관련 변수에 액세스하려면 배열을 사용하는 것이 더 좋습니다. 이것이 바로 어레이가 설계된 목적이며, 이를 더욱 편리하고 안전하게 만드는 것입니다. Bash의 배열에 대해 알아보려면 시스템 또는 시스템의 배열에 대한 bash 매뉴얼 섹션을 참조하세요.여기 웹에서

관련 정보