Trích dẫn đơn trong dấu ngoặc kép và hướng dẫn tham khảo Bash


18

Trong phần 3.1.2.3 có tiêu đề Báo giá kép, hướng dẫn Bash nói:

Việc đóng các ký tự trong dấu ngoặc kép ('"') sẽ giữ nguyên giá trị bằng chữ của tất cả các ký tự trong dấu ngoặc kép, ngoại trừ '$', '`', '\' và khi bật mở rộng lịch sử, '!'.

Hiện tại tôi quan tâm đến trích dẫn duy nhất ( ').

Ý nghĩa đặc biệt của nó, được mô tả trong phần trước, phần 3.1.2.2 là:

Các ký tự kèm theo trong dấu ngoặc đơn ( ') sẽ giữ nguyên giá trị bằng chữ của mỗi ký tự trong dấu ngoặc kép. Một trích dẫn có thể không xảy ra giữa các trích dẫn đơn, ngay cả khi trước dấu gạch chéo ngược.

Kết hợp hai giải trình,

 echo "'$a'"

trong đó biến akhông được xác định (do đó $a= chuỗi null), nên in $atrên màn hình, vì ''nó có ý nghĩa đặc biệt bên trong, sẽ che chắn $cho việc giải thích đặc biệt. Thay vào đó, nó in ''. Tại sao vậy?

Câu trả lời:


21

'tự trích dẫn đơn trong echoví dụ của bạn có giá trị theo nghĩa đen (và mất nghĩa của nó) vì nó được đặt trong dấu ngoặc kép ( "). Các ký tự kèm theo là dấu ngoặc kép.

Những gì bạn có thể làm là in các trích dẫn riêng biệt:

echo "'"'$a'"'"

hoặc thoát khỏi $:

echo "'\$a'"

Oh bạn hoàn toàn đúng! Đầu ra phù hợp với câu trả lời của bạn nhưng tôi nghi ngờ với dòng "Đóng dấu ký tự trong dấu ngoặc kép ('"') giữ nguyên giá trị bằng chữ của tất cả các ký tự trong dấu ngoặc kép, ngoại trừ '$', ' ’, ‘\’, and, when history expansion is enabled, ‘!’." in the manual. But now reading it again I realized the second character is not single quote, ("'") but tilde (""). I' m biết ơn vì phản hồi nhanh chóng của bạn. Cảm ơn bạn!
Lavya

2
Ký tự thứ hai được đề cập trong hướng dẫn sử dụng là backtick không phải dấu ngã.
Kenny Evitt

6

Bạn hiểu sai tài liệu:

có ý nghĩa đặc biệt bên trong, sẽ bảo vệ $ khỏi cách giải thích đặc biệt

"Có ý nghĩa đặc biệt của nó" có nghĩa là nó được giải thích đặc biệt không theo nghĩa đen. Báo giá duy nhất ngăn không $được mở rộng. Nhưng dấu ngoặc đơn trong dấu ngoặc kép là ký tự theo nghĩa đen, nghĩa là chúng không ảnh hưởng gì cả. Nếu bạn muốn đầu ra $athì bạn cần echo '$a'.


bạn đúng rồi. Tôi không chỉ hiểu nhầm tài liệu, tôi đã đọc sai nó (tài năng "` "cho" '"!). bạn nói đúng về "trích dẫn đơn trong dấu ngoặc kép là các ký tự theo nghĩa đen". Cảm ơn!
Lavya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.