Khai báo một mảng nhưng không định nghĩa nó?


14

Có rất nhiều hướng dẫn ngoài kia chỉ ra cách khai báo và định nghĩa một mảng

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

Những gì tôi đang cố gắng đạt được là khai báo một mảng nhưng không xác định nó bởi vì nó không phải được định nghĩa ngay lập tức, trong hầu hết các ngôn ngữ lập trình, nó sẽ trông giống như thế này

int bar[100];

Điều này có thể trong ngôn ngữ kịch bản shell?

Câu trả lời:


23

Bạn có thể chỉ định rằng một biến là một mảng bằng cách tạo một mảng trống, như vậy:

var_name=()

var_name sau đó sẽ là một mảng như được báo cáo bởi

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

Thí dụ:

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]}"

cái nào tạo ra cái gì đó như thế này:

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: ..và làm thế nào để xác định các yếu tố? Tôi đã thử nhưng chỉ có thể xác định / truy cập một chuỗi .. một ví dụ nhỏ để xác định và truy cập các giá trị vào biến mảng sẽ rất tuyệt ...
chính xác là

cũng nhận ra rằng .. tôi đã bỏ lỡ niềng răng ..
chính xác là

4

Ngoài cách trên, chúng ta cũng có thể tạo một mảng bằng cách khai báo câu lệnh.

Câu lệnh khai báo với tùy chọn -a có thể được sử dụng để khai báo một biến dưới dạng một mảng, nhưng không cần thiết. Tất cả các biến có thể được sử dụng như mảng mà không có định nghĩa rõ ràng. Như một vấn đề thực tế, có vẻ như trong một nghĩa nào đó, tất cả các biến là mảng và phép gán mà không có chỉ mục con cũng giống như gán cho "[0]". Khai báo rõ ràng của một mảng được thực hiện bằng cách sử dụng khai báo tích hợp:

declare -a ARRAYNAME

Mảng kết hợp được tạo bằng cách sử dụng

declare -A name.

Các thuộc tính có thể được chỉ định cho một biến mảng bằng cách sử dụng các nội dung khai báo và chỉ đọc. Mỗi thuộc tính áp dụng cho tất cả các thành viên của một mảng.

Sau khi bạn đã đặt bất kỳ biến mảng nào, bạn truy cập vào nó như sau:

${array_name[index]}

1

Điều này thực sự giống như C. Trong C, chúng ta có thể lấy mảng theo ý bạn. Ở đây, chúng ta có thể lấy một mảng trống và sau đó đặt bất kỳ giá trị nào.

bar=()

Simple For Loop lấy giá trị trong mảng đó và in ra:

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

Hy vọng nó giúp.


Vấn đề trong câu trả lời là gì? Tại sao lại bỏ phiếu?
Maniruzzaman Akash
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.