Các repo
lệnh không thể chăm sóc những loại dấu ngoặc kép nó được. Nếu bạn cần mở rộng tham số, sử dụng dấu ngoặc kép. Nếu điều đó có nghĩa là bạn sẽ phải viết lại nhiều nội dung, hãy sử dụng các trích dẫn duy nhất cho phần lớn nội dung đó, sau đó thoát ra khỏi chúng và tăng gấp đôi cho phần mà bạn cần mở rộng.
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
Giải thích sau, nếu bạn quan tâm.
Khi bạn chạy một lệnh từ shell, thứ mà lệnh đó nhận làm đối số là một chuỗi các chuỗi kết thúc null. Những chuỗi đó có thể chứa hoàn toàn bất kỳ ký tự không null nào.
Nhưng khi shell đang xây dựng chuỗi các chuỗi từ một dòng lệnh, nó sẽ diễn giải một số ký tự đặc biệt; điều này được thiết kế để làm cho các lệnh dễ dàng hơn (thực sự, có thể) để gõ. Chẳng hạn, khoảng trắng thường chỉ ra ranh giới giữa các chuỗi trong mảng; vì lý do đó, các đối số riêng lẻ đôi khi được gọi là "từ". Nhưng một cuộc tranh luận dù sao cũng có thể có khoảng trống trong đó; bạn chỉ cần một số cách để nói với cái vỏ đó là những gì bạn muốn.
Bạn có thể sử dụng dấu gạch chéo ngược phía trước bất kỳ ký tự nào (bao gồm dấu cách hoặc dấu gạch chéo ngược khác) để nói với shell để xử lý ký tự đó theo nghĩa đen. Nhưng trong khi bạn có thể làm một cái gì đó như thế này:
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
... Nó có thể gây mệt mỏi. Vì vậy, vỏ cung cấp một thay thế: dấu ngoặc kép. Chúng có hai loại chính.
Dấu ngoặc kép được gọi là "dấu ngoặc kép". Chúng ngăn các ký tự đại diện và bí danh được mở rộng, nhưng chủ yếu là để bao gồm các khoảng trắng trong một từ. Những điều khác như mở rộng tham số và lệnh (các loại điều được báo hiệu bởi a $
) vẫn xảy ra. Và tất nhiên nếu bạn muốn có một trích dẫn kép theo nghĩa đen bên trong dấu ngoặc kép, bạn phải gạch chéo lại nó:
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
Dấu ngoặc đơn là hà khắc hơn. Tất cả mọi thứ giữa chúng được thực hiện hoàn toàn theo nghĩa đen, bao gồm cả dấu gạch chéo ngược. Hoàn toàn không có cách nào để có được một trích dẫn theo nghĩa đen bên trong các trích dẫn đơn.
May mắn thay, dấu ngoặc kép trong vỏ không phải là dấu phân cách từ ; bởi chính họ, họ không chấm dứt một từ. Bạn có thể vào và ra dấu ngoặc kép, bao gồm giữa các loại trích dẫn khác nhau, trong cùng một từ để có kết quả mong muốn:
echo '"Thank you. That'\''ll be $4.96, please," said the cashier'
Vì vậy, điều đó dễ dàng hơn - ít dấu gạch chéo ngược hơn, mặc dù chuỗi trích dẫn đơn, trích dẫn ngược theo nghĩa đen, trích dẫn đơn, trích dẫn đơn đã làm quen với một số.
Các shell hiện đại đã thêm một kiểu trích dẫn khác không được chỉ định bởi tiêu chuẩn POSIX, trong đó dấu ngoặc kép đơn hàng đầu được thêm tiền tố bằng ký hiệu đô la. Các chuỗi được trích dẫn tuân theo các quy ước tương tự với các chuỗi ký tự trong ngôn ngữ lập trình ANSI C, và do đó đôi khi được gọi là "chuỗi ANSI" và $'
... '
cặp "trích dẫn ANSI". Trong các chuỗi như vậy, lời khuyên ở trên về dấu gạch chéo ngược được thực hiện theo nghĩa đen không còn được áp dụng. Thay vào đó, chúng trở nên đặc biệt một lần nữa - bạn không chỉ có thể bao gồm một dấu ngoặc kép đơn hoặc dấu gạch chéo ngược bằng cách thêm dấu gạch chéo ngược vào nó, mà trình bao còn mở rộng ký tự ANSI C thoát ra (như \n
cho một dòng mới, \t
cho tab và \xHH
cho ký tự mã thập lục phânHH
). Mặt khác, tuy nhiên, chúng hoạt động như các chuỗi trích dẫn đơn: không có thay thế tham số hoặc lệnh:
echo $'"Thank you. That\'ll be $4.96, please," said the cashier'
Điều quan trọng cần lưu ý là chuỗi đơn nhận được làm đối số cho echo
lệnh hoàn toàn giống nhau trong tất cả các ví dụ này. Sau khi shell được phân tích cú pháp một dòng lệnh, không có cách nào để lệnh được chạy để cho biết những gì đã được trích dẫn như thế nào. Ngay cả khi nó muốn.
repo forall -c ' ...before... '"$variable"' ...after...'