Làm cách nào để nhận được đối số vị trí thứtrong bash?Cách lấy đối số vị trí thứ n trong bash?
Cảm ơn.
Chỉnh sửa: Tôi quên nói nhưng ý tôi là n
là một biến.
Làm cách nào để nhận được đối số vị trí thứtrong bash?Cách lấy đối số vị trí thứ n trong bash?
Cảm ơn.
Chỉnh sửa: Tôi quên nói nhưng ý tôi là n
là một biến.
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
$1 $2 ... $n
$0
chứa tên của tập lệnh.
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ố.
đọc
Handling positional parameters
và
$ 0: các tham số vị trí đầu tiên
$ 1 ... $ 9: các yếu tố danh sách đối số 1-9
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. –
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!
Sự khác nhau giữa '$ {12}' và '$ 12' là gì? – HelloGoodbye
Xin chào @HelloGoodbye, '$ 12' có nghĩa là' $ 1' và ký tự '2'. '$ {12}' có nghĩa là tham số thứ 12. –
Có ai có thể giải thích tại sao $ {@ [n]} không hoạt động không? –
@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 –