2012-01-02 44 views
6

Tôi cố gắng khai báo biến số x với tất cả các ký tự từ a..x. Trên dòng lệnh (bash), thay thế a..x hoạt động với bất kỳ dấu tích nào.Cách sử dụng thay thế Bash trong khai báo biến

$ echo {a..x} 
a b c d e f g h i j k l m n o p q r s t u v w x 

Nhưng gán nó cho biến qua x={a..x} làm kết quả trong chuỗi {a..x}. Chỉ x=$(echo {a..x}) hoạt động.

Câu hỏi đặt ra là: Đây có phải là cách phân công phù hợp hay tôi phải làm những việc khác?

Mục đích chính là để gán chuỗi thành một mảng, ví dụ:

disks=($(echo {a..x})) 
+1

mở rộng cú đúp thất bại trên phân công bởi vì nó pro duces một danh sách và biến chỉ chấp nhận một giá trị vô hướng; bash là "thông minh" theo nghĩa này bởi vì nó biết nó không thể gán một danh sách cho biến để nó không mở rộng tất cả, đó là lý do tương tự bạn có thể gán các biến chứa dấu cách mà không trích dẫn chúng, vì nó là một giá trị vô hướng. không áp dụng tách từ trên nội dung ngay cả khi không được bỏ phiếu. tuy nhiên mảng này chấp nhận một danh sách và trong trường hợp đó, cả việc mở rộng cú đúp và tách từ sẽ xảy ra. –

Trả lời

5

Bạn cũng có thể sử dụng set (nhưng hãy chắc chắn để lưu các thông số vị trí nếu bạn vẫn cần đến chúng):

set {a..x} 
x="[email protected]" 

Đối với mảng, mở rộng cú đúp làm việc trực tiếp:

disks=({a..x}) 
+0

'd = ({a..x}); echo $ d' trên cmdline cũng như trong tập lệnh chỉ dẫn đến 'a' chỉ một số – tuergeist

+1

@tuergeist, hãy thử' echo $ {d [@]} 'hoặc' echo $ {d [*]} 'http: // tldp. org/LDP/abs/html/arrays.html –

+0

@akk: Cảm ơn! Tất nhiên, chỉ cần 'd' trỏ đến phần tử đầu tiên. – tuergeist

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