Câu trả lời:
Đây chỉ là một câu hỏi "bởi vì tôi muốn biết", hoặc có một trường hợp sử dụng thực sự cho nó? Chúng tôi có thể đi qua một số môn thể dục dụng cụ để hoàn thành nó:
$ eval echo\ {a,b,c}\;
a
b
c
Nhưng tôi sẽ săn lùng bất cứ ai đưa các loại lệnh khó hiểu này vào các tập lệnh hệ thống của chúng tôi.
Tại sao không đi cho rõ ràng thay thế:
$ for X in {a,b,c}; do echo $X; done
Bạn thậm chí có thể đi cả con lợn và đặt một vài dòng mới và thụt lề một chút để bạn luôn có thể hiểu những gì bạn đang cố gắng làm.
for
công việc này, nhưng nó vẫn gõ nhiều hơn: P
eval git branch -d \{ branch-a, branch-b }\;
Dựa trên câu trả lời được chọn của Mark Mann , tôi có thể rút ra thêm ví dụ này, hoạt động rất tuyệt:
$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak
Những gì đang hiển thị, là khi bạn đang sử dụng nhiều lần mở rộng niềng răng trong một dòng, ví dụ ban đầu của Mark sẽ in riêng từng biến thể. Thay vào đó, tôi muốn sử dụng câu trả lời của anh ấy để di chuyển / đổi tên nhiều tập tin. Để đảm bảo rằng đầu ra khớp với định dạng mà mv
thông thường mong đợi ( mv oldfilename newfilename
), tôi đã thoát khỏi lần xuất hiện thứ hai của mở rộng dấu ngoặc, để nó không được đánh giá cho đến khieval
lệnh ban đầu được thực thi.
Khi đầu ra ở trên xuất hiện như mong đợi, tôi đã có thể chạy lệnh sau:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
Rất cám ơn Mark cho câu trả lời ban đầu của mình. Hãy bỏ phiếu cho câu trả lời của anh ấy nếu bạn thích câu trả lời của anh ấy cho phép tôi làm :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
thì tốt hơn là sử dụng hình thức ngắn hơn là liệt kê tất cả 27 giá trị.