숫자가 포함된 변수를 실행하는 데 문제가 있습니다.
이것은 작동합니다.
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 매뉴얼에서 배열 섹션을 참조하세요.여기서 온라인으로