Trang chủ » làm thế nào để » Sự khác biệt giữa trích dẫn đơn và kép trong Bash Shell là gì?

    Sự khác biệt giữa trích dẫn đơn và kép trong Bash Shell là gì?

    Đóng văn bản trong dấu ngoặc kép là cách thực hành khá chuẩn trên dòng lệnh, đặc biệt là khi xử lý các tệp có khoảng trắng trong tên, nhưng làm thế nào để bạn biết nên sử dụng dấu ngoặc đơn hay dấu ngoặc kép? Hãy xem sự khác biệt và khi nào bạn nên sử dụng cái này với cái kia.

    Nguyên tắc chung là dấu ngoặc kép vẫn cho phép mở rộng các biến trong dấu ngoặc kép và dấu ngoặc đơn thì không. Hãy đọc tiếp.

    Trích dẫn với văn bản đơn giản

    Nếu bạn chỉ đơn giản là kèm theo một vài từ văn bản, thì thực sự bạn không sử dụng từ nào, vì cả hai sẽ hoạt động giống hệt nhau. Chẳng hạn, hai lệnh này sẽ tạo cả một thư mục có tên Test Directory:

    mkdir "Thư mục kiểm tra"
    mkdir 'Thư mục kiểm tra'

    Các loại có kinh nghiệm hơn có thể sẽ lưu ý rằng bạn cũng có thể sử dụng mkdir Test \ Directory nếu bạn muốn.

    Mở rộng biến Shell

    Sự khác biệt giữa dấu ngoặc đơn và dấu ngoặc kép trở nên quan trọng hơn khi bạn xử lý các biến trên dòng lệnh - theo mặc định, bash sẽ mở rộng một biến như $ test thành chuỗi đầy đủ. Đầu tiên, chúng ta sẽ gán biến:

    test = "Đây là một bài kiểm tra"

    Bây giờ bạn có thể sử dụng biến này trên dòng lệnh, như thế này, chỉ cần xuất ra Đây là một bài kiểm tra đến bàn điều khiển:

    kiểm tra tiếng vang $

    Đây là nơi khác biệt giữa dấu ngoặc kép và dấu ngoặc đơn trở nên rõ ràng hơn - khi bạn sử dụng dấu ngoặc đơn, các biến sẽ không được mở rộng. Chẳng hạn, nếu bạn chạy lệnh này:

    tiếng vang '$ test'

    Bạn sẽ không thấy gì ngoài '$ test' trên dòng lệnh khi bạn sử dụng dấu ngoặc đơn, nhưng nó sẽ xuất ra chính xác khi bạn sử dụng dấu ngoặc kép:

    Điều tương tự cũng hoạt động khi bạn sử dụng ký tự 'để mở rộng lệnh trên dòng lệnh. Ví dụ, giả sử bạn muốn sử dụng pwd lệnh từ bên trong một lệnh khác - bạn sẽ sử dụng backticks để báo cho shell để mở rộng nó:

    tiếng vang 'pwd' / kiểm tra

    Nếu bạn đang ở trong thư mục nhà của mình, bạn sẽ thấy đầu ra trông như thế này:

    / nhà / đam mê / kiểm tra

    Ví dụ, giả sử bạn đang ở trong một thư mục có khoảng trắng trong đường dẫn và bạn muốn sử dụng lệnh ln để tạo liên kết tượng trưng đến một tệp trong thư mục hiện tại. Bạn thường cần chỉ định đường dẫn đầy đủ khi sử dụng lệnh ln, vì vậy sử dụng 'pwd' để lưu gõ dễ dàng hơn nhiều.

    Hãy xem điều gì xảy ra khi bạn thử và sử dụng lệnh mà không kèm theo dấu ngoặc kép:

    ln -s 'pwd' / test / home / geek / linkname

    Thay vào đó, bạn sẽ cần phải bao quanh trong dấu ngoặc kép:

    ln -s "'pwd' / tên tệp" / some / other / path

    Đối với một ví dụ cụ thể hơn, hãy giả sử rằng chúng ta có cấu trúc thư mục như ví dụ này, trong đó tất cả các tên tệp có khoảng trắng trong chúng:

    Vì lệnh giải nén không hỗ trợ sử dụng * để chạy trên tất cả các tệp, nên bạn sẽ cần sử dụng lệnh for thay thế. Đây là nơi mọi thứ trở nên thú vị:

    cho f trong * .zip; giải nén $ f; xong

    Rất tiếc! Có vẻ như nó không hoạt động.

    Thay vào đó, những gì chúng ta cần làm là sử dụng dấu ngoặc kép quanh biến $ f, như thế này:

    cho f trong * .zip; giải nén "$ f"; xong

    Bây giờ mỗi khi lệnh for đi qua vòng lặp, nó sẽ thực sự chạy một lệnh như thế này:

    giải nén "kiểm tra 1.zip"

    Tất nhiên, nó sẽ lặp qua và chạy một lệnh tương tự cho mọi tệp trong thư mục.

    Hãy xem lại

    Bây giờ chúng tôi đã xem qua các ví dụ, chúng tôi sẽ nhanh chóng xem xét trong trường hợp bạn bỏ lỡ nó:

    Dấu ngoặc kép

    • Sử dụng khi bạn muốn bao quanh các biến hoặc sử dụng mở rộng shell trong chuỗi.
    • Tất cả các ký tự bên trong được hiểu là các ký tự thông thường ngoại trừ $ hoặc 'sẽ được mở rộng trên hệ vỏ.

    Dấu nháy đơn

    • Tất cả các ký tự trong dấu ngoặc đơn được hiểu là một ký tự chuỗi.

    Và do đó kết thúc bài học của các trích dẫn. Sử dụng chúng một cách khôn ngoan.