배열을 선언하지만 정의하지 않습니까?


14

많이 있습니다 가이드 거기 선언하고 배열을 정의하는 방법을 보여줍니다

foo[0]=abc 
foo[1]=def

내가 달성하려는 것은 배열을 선언하지만 즉시 정의 할 필요가 없으므로 정의하지 않는 것입니다. 대부분의 프로그래밍 언어에서는 다음과 같이 보일 것입니다

int bar[100];

쉘 스크립팅 언어로 가능합니까?

답변:


23

다음과 같이 빈 배열을 만들어 변수가 배열임을 지정할 수 있습니다.

var_name=()

var_name 그런 다음에 의해보고 된 배열이됩니다

$ declare -p var_name
declare -a var_name='()'

예:

var_name=()
for i in {1..10}; do
    var_name[$i]="Field $i of the list"
done
declare -p var_name
echo "Field 5 is: ${var_name[5]}"

다음과 같이 출력됩니다.

declare -a var_name='([1]="Field 1 of the list" [2]="Field 2 of the list" [3]="Field 3 of the list" [4]="Field 4 of the list" [5]="Field 5 of the list" [6]="Field 6 of the list" [7]="Field 7 of the list" [8]="Field 8 of the list" [9]="Field 9 of the list" [10]="Field 10 of the list")'
Field 5 is: Field 5 of the list

minerz029, @am : .. 그리고 요소를 정의하는 방법? 시도했지만 단일 문자열 만 정의 / 액세스 할 수있었습니다. 배열 변수에 값을 정의하고 액세스하는 작은 예제는 훌륭합니다.
정확한

잘 알아 냈어 .. 나는 중괄호를 잃어 버렸다.
정확한

4

위의 방법 외에도 선언문으로 배열을 만들 수도 있습니다.

-a 옵션이있는 선언문을 사용하여 변수를 배열로 선언 할 수 있지만 필수는 아닙니다. 모든 변수는 명시 적 정의없이 배열로 사용할 수 있습니다. 실제로 모든 변수가 배열이고 아래 첨자가없는 할당은 "[0]"에 할당하는 것과 같습니다. 배열의 명시 적 선언은 선언 내장 선언을 사용하여 수행됩니다.

declare -a ARRAYNAME

연관 배열은 다음을 사용하여 생성됩니다.

declare -A name.

선언 및 읽기 전용 내장을 사용하여 배열 변수에 속성을 지정할 수 있습니다. 각 속성은 배열의 모든 멤버에 적용됩니다.

배열 변수를 설정 한 후 다음과 같이 액세스하십시오.

${array_name[index]}

1

이것은 실제로 C와 동일합니다. C에서는 원하는대로 배열을 취할 수 있습니다. 여기서 빈 배열을 가져 와서 값을 넣을 수 있습니다.

bar=()

Simple For Loop는 해당 배열에서 가치를 얻고 다음을 인쇄합니다.

bar=()
for ((i=0;i<10;i++));
do
    read bar[$i]  #Take Value in bar array
    echo bar[$i]
done

희망이 있습니다.


대답의 문제점은 무엇입니까? 왜 다운 투표?
Maniruzzaman Akash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.