변수를 동적으로 추가하는 방법 다음 스크립트를 작성했지만 오류가 발생합니다.
#!/bin/bash
X='101 Hari BAN'
for i in "${X[@]}"
do
"V"$j=`echo $i|cut -d' ' -f$j`
echo "V"$j
j=`expr $j + 1`
done
출력은 다음과 같아야합니다.
V1=101
V2=Hari
V3=BAN
답변1
첫째, 사용 중이고 bash
반복하려는 경우별개의 것들, 다음 배열을 사용합니다.
X=( 101 Hari BAN "many words" "a * in the sky" )
이를 통해 공백과 파일 이름 글로빙 패턴이 포함된 문자열을 적절하게 인용하여 올바르게 처리할 수 있습니다.
그런 다음 배열을 반복합니다.
X=( 101 Hari BAN "many words" "a * in the sky" )
for item in "${X[@]}"; do
done
그런 다음 출력 결과 문제가 있습니다. 이를 위해 카운터 합계를 사용합니다 printf
.
X=( 101 Hari BAN "many words" "a * in the sky" )
n=0
for item in "${X[@]}"; do
printf 'V%d=%s\n' "$(( ++n ))" "$item"
done
형식 printf
문자열은 V%d=%s\n
" V
문자 뒤에 정수, a =
및 일부 문자열이 옵니다. 개행 문자로 끝납니다"를 의미합니다. 정수와 문자열은 나머지 매개변수에서 가져옵니다 printf
. 이 변수는 n
사용되기 전에 증가됩니다 printf
.
#!
통역사를 가리키는 올바른 줄을 추가 하면 bash
작업이 완료됩니다.
출력은 다음과 같습니다
V1=101
V2=Hari
V3=BAN
V4=many words
V5=a * in the sky
아래 설명에 따르면 가 변수일 것으로 예상했지만 V1
출력 V2
에서는 분명히 텍스트일 뿐입니다.
이번에도 여기서 필요한 것은 별도의 변수가 아니라 배열이라고 생각합니다.
사실, 우리가 이미 갖고 있는 배열에는 X
필요한 데이터가 포함되어 있으므로 이름만 바꾸면 됩니다.
#!/bin/bash
V=( 101 Hari BAN )
for i in "${!V[@]}"; do
printf 'V[%s] = %s\n' "$i" "${V[i]}"
done
즉, 간단히 등을 사용하여 배열의 요소에 액세스할 수 있습니다 "${V[0]}"
."${V[1]}"
V