
다른 명령을 실행하기 위해 반복하는 배열이 있습니다. 다음 항목으로 넘어가기 전에 배열 값으로 수행해야 할 마지막 작업은 배열 값을 이름으로 사용하여 변수를 만들고 다른 변수를 포함하는 문자열을 할당하는 것입니다.
현재 내 코드는 다음과 같습니다.
for i in ${array[@]} do
some command
$i_value="my string including other variables ${other_variable}"
done
echo $i_value
이것을 실행하면 다음 오류가 발생하며 배열 값(가져오는 값)으로 변수를 생성하는 대신 파일을 찾는 이유를 알 수 없습니다.
line 5: *value*_value=my string including other variables *other_variable*: no such file or directory.
답변1
foo_value
변수 등을 외부적으로 생성할 필요 가 없고 bar_value
단지 스크립트에서 사용해야 하는 경우 연관 배열을 사용해야 할 것입니다. 이와 같이:
declare -A values
for i in "${array[@]}"; do
# some commands...
values[$i]="my string including other variables ${other_variable}"
done
echo "${values[$i]}"
# loop over the keys:
for key in "${!values[@]}"; do
echo "values has key '$key'"
done
(공백과 와일드카드가 포함된 값을 적절하게 처리하려면 주위에 따옴표를 붙이고 싶고 "${array[@]}"
그 앞에는 세미콜론이 필요하다는 점에 유의하세요 do
. for i in ...; do
)
답변2
그냥 export
내장된 것을 사용하세요...
예(부수적인 이점: 액세스에 동적 변수 이름을 사용합니다 ;-p)
~$ cat test.sh
#!/bin/bash
toto="coincoin"
tata="cuicui"
for var in toto tata; do
export coincoin_${!var}="${var}"
done
echo "${coincoin_cuicui}"
echo "${coincoin_coincoin}"
~$ ./test.sh
tata
toto