2016-05-02 18 views
7

Nói rằng tôi có một mảng:Nhận yếu tố cuối cùng trong mảng Bash

arr=(a b c d e f) 

Nếu tôi muốn để có được những yếu tố cuối cùng của mảng, tôi thường phải lấy tổng số của các yếu tố, trừ một và sử dụng rằng số để gọi là một chỉ số:

$ echo ${#arr[@]} 
6 
$ echo ${arr[${#arr[@]}-1]} 
f 

Tuy nhiên, I see rằng thời gian gần đây (Bash 4,2-4,3), bạn có thể sử dụng chỉ số tiêu cực:

$ echo ${arr[-1]} 
f 
$ echo ${arr[-2]} 
e 

Vì vậy, tôi tự hỏi: khi nào điều này được giới thiệu? Nó cũng có thể sử dụng được bởi các loại vỏ khác như ksh, zsh ...?

Nghiên cứu của tôi cho thấy:

Bash-4.3-rc1 available for FTP

a. Đã sửa lỗi gây ra gán cho biến không được đặt bằng cách sử dụng số chỉ số âmđể dẫn đến lỗi phân đoạn.

b. Đã khắc phục lỗi gây ra gán cho biến chuỗi bằng cách sử dụng chỉ số tiêu cực để sử dụng chỉ mục không chính xác.

...

x. Shell bây giờ cho phép gán, tham chiếu và xóa các phần tử các mảng được lập chỉ mục sử dụng các bảng con phủ định (a [-1] = 2, echo $ {a [-1]}) đếm ngược từ phần tử cuối cùng của mảng.

Bash manual 4.3, on Arrays

Tham khảo một biến mảng mà không cần một subscript tương đương với tham khảo với một subscript của 0. Nếu subscript dùng để tham chiếu một phần tử của một mảng được lập chỉ mục để đánh giá một số ít so với số không, nó được hiểu là có liên quan đến một lớn hơn chỉ số tối đa là mảng, vì vậy chỉ số âm tính ngược lại từ cuối mảng, và chỉ số -1 đề cập đến phần tử cuối cùng.

Nhưng tôi tự hỏi nếu điều này đã có trong Bash 4.2, vì tài nguyên đầu tiên đề cập đến lỗi đã được sửa.

+1

Rất tiếc, việc kiểm tra palindrome đã trở nên dễ dàng hơn nhiều. – sjsam

+1

Để trả lời câu hỏi khác của bạn: Đó là trong zsh quá. Không biết về ksh. – user1934428

Trả lời

4

Theo như tôi có thể nhìn thấy trong https://tiswww.case.edu/php/chet/bash/CHANGES, tính năng mới là trong phần này:

Tài liệu này mô tả chi tiết những thay đổi giữa phiên bản này, bash-4,3-alpha, và các phiên bản trước, bash -4.2-phát hành.

...

x. Shell bây giờ cho phép gán, tham chiếu và unsetting các phần tử của các mảng được lập chỉ mục sử dụng các subscript âm (a [-1] = 2, echo $ {a [-1]}) được đếm ngược từ phần tử cuối cùng của mảng.

Việc sửa chữa trong:

Tài liệu này mô tả chi tiết những thay đổi giữa phiên bản này, bash-4,3-beta2, và theprevious phiên bản, bash-4,3-beta.

1 Thay đổi đối với Bash

a. Đã sửa lỗi gây ra việc gán cho biến không được đặt bằng cách sử dụng chỉ số phủ định để dẫn đến lỗi phân đoạn.

b. Đã khắc phục lỗi gây ra gán cho biến chuỗi bằng cách sử dụng chỉ số phủ định để sử dụng chỉ mục không chính xác.

Khắc phục một tính năng mới trong Bash 4.3.

Các vấn đề liên quan