알 수 없는 차원으로 Bash에서 2D 배열 생성

알 수 없는 차원으로 Bash에서 2D 배열 생성

사용자 입력 이전에 차원을 알 수 없는 경우 2D 배열을 생성할 수 있는지 궁금합니다. 예를 들어, 사용자가 명령줄에 2 2를 입력하면 쉘은 이를 기반으로 2D 배열을 생성합니까? 감사합니다

답변1

bash해석된 언어이므로 미리 할당할 메모리 양을 알 필요가 없습니다.

따라서 선언하지 않고 새 배열을 동적으로 초기화하거나 이미 선언된 배열을 확장하여 더 많은 항목을 추가하는 것이 가능하지만 다차원 배열을 사용하는 것은 불가능합니다.

그러나 이것은 가짜일 수 있습니다. 수행할 정확한 작업을 제공하지 않았으므로 bash사용자 정의 m x n테이블을 임의의 숫자로 채우는 방법을 보여주는 스크립트 예제를 제공하겠습니다. 매번 실행될 때마다 모든 행에 항상 동일한 번호가 있지만 이는 질문과 관련이 없습니다.이것스택 오버플로 답변):

#!/bin/bash

declare -a array
read -p 'm: ' m
read -p 'n: ' n
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        a[${i},${j}]=$RANDOM
    done
done
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        echo -ne "${a[${i},${j}]}\t"
    done
    echo
done

답변2

1D 배열을 선언하고 런타임에 모든 숫자를 1D 배열로 읽을 수 있습니다. 차원을 알고 나면 1D 배열을 "2D 배열처럼" 처리할 수 있습니다.

예를 들어 1D 배열에 다음이 포함되어 있다고 가정합니다.

[1, 5, 9, 11]

우리가 정말로 원한다면

[[1,5], [9,11]]

인덱스 0이 [1,5]가 되도록 배열로 사용하면 [1,5]에 액세스하기 위해 다음과 같은 작업을 수행할 수 있습니다(pos = 0).

의사코드

for i in 0:(pos*dim + dim-1)  
    echo arr[i]

[9,11]에 액세스하려면 (pos = 1)

for i in pos*dim:(pos*dim + dim - 1)
    echo arr[i]

이것이 의미가 있기를 바랍니다. 실제로 2D 배열은 일종의 1D 배열입니다.

관련 정보