사용자 입력 이전에 차원을 알 수 없는 경우 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 배열입니다.