2009-09-30 42 views

Trả lời

85

Sử dụng Bash đối tượng địa lý gián tiếp:

#!/bin/bash 
n=3 
echo ${!n} 

Chạy tập tin đó:

$ ./ind apple banana cantaloupe dates 

Tạo:

cantaloupe 

Edit:

Bạn cũng có thể làm mảng cắt:

echo ${@:$n:1} 

nhưng không subscript mảng:

echo ${@[n]} # WON'T WORK 
+7

Có ai có thể giải thích tại sao $ {@ [n]} không hoạt động không? –

+1

@AlexanderOleynikov Nó gây ra lỗi "thay thế xấu"; Tôi giả sử vì '@' (và '*') là "Tham số Đặc biệt" và vì chúng không phải là tên mảng hợp lệ? '$ {@}' * không * tham chiếu đến các tham số được đánh số, nhưng '@' không phải là mảng và hỗ trợ không được triển khai để phân tích cú pháp như vậy, trong khi ví dụ: "' $ {unsetvariable} '" sẽ tạo ra kết quả rỗng vì nó là một tên mảng/biến hợp lệ, chưa được thiết lập (và những ngoại lệ này được xử lý đặc biệt trong mã nguồn của bash, tôi đoán). Tôi đã cố gắng tìm ra một lý do tốt hơn trong 'man bash', nhưng việc quét tìm @ đã khiến tôi hết kiên nhẫn. ; P –

4
$1 $2 ... $n 

$0 chứa tên của tập lệnh.

0

Như bạn có thể thấy trong số Bash by Example, bạn chỉ cần sử dụng các biến số tự động $ 1, $ 2, v.v.

$ # được sử dụng để lấy số lượng đối số.

-1

đọc

Handling positional parameters

Parameter expansion

$ 0: các tham số vị trí đầu tiên

$ 1 ... $ 9: các yếu tố danh sách đối số 1-9

+0

Câu trả lời này không đề cập đến câu hỏi ban đầu của OP. Ông đặc biệt hỏi làm thế nào để có được một tham số bằng chỉ số của nó được lưu trữ trong một biến. –

8

Nếu N được lưu trong một biến, sử dụng

eval echo \${$N} 

nếu đó là một sử dụng liên tục

echo ${12} 

từ

echo $12 

không có nghĩa là giống nhau!

+0

Sự khác nhau giữa '$ {12}' và '$ 12' là gì? – HelloGoodbye

+3

Xin chào @HelloGoodbye, '$ 12' có nghĩa là' $ 1' và ký tự '2'. '$ {12}' có nghĩa là tham số thứ 12. –

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