변수를 동적으로 추가하는 방법

변수를 동적으로 추가하는 방법

변수를 동적으로 추가하는 방법 다음 스크립트를 작성했지만 오류가 발생합니다.

#!/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

관련 정보