Chỉ là một ghi chú / tóm tắt nhanh cho bất kỳ ai đã đến đây qua Google để tìm kiếm câu trả lời cho câu hỏi chung được hỏi trong tiêu đề (như tôi đã từng). Bất kỳ điều nào sau đây sẽ hoạt động để có quyền truy cập vào các biến shell bên trong dấu ngoặc kép:
echo "$VARIABLE"
echo "${VARIABLE}"
Sử dụng các dấu ngoặc kép là vấn đề chính. Theo Sổ tay Tham khảo Bash :
Việc đặt các ký tự trong dấu ngoặc kép ( '
) giữ nguyên giá trị chữ của mỗi ký tự trong dấu ngoặc kép. Một dấu ngoặc kép có thể không xảy ra giữa các dấu nháy đơn, ngay cả khi đứng trước dấu gạch chéo ngược. [...] Kèm theo ký tự trong dấu ngoặc kép ( "
) giữ gìn giá trị văn chương của tất cả các ký tự trong dấu ngoặc kép, với ngoại lệ của $
, `
, \
, và, khi mở rộng lịch sử được kích hoạt, !
. Các ký tự $
và `giữ lại ý nghĩa đặc biệt của chúng trong dấu ngoặc kép (xem Phần mở rộng của Shell). Các dấu chéo ngược vẫn giữ được ý nghĩa đặc biệt của nó chỉ khi theo sau là một trong những nhân vật sau: $
, `
, "
,\
, hoặc dòng mới. Trong dấu ngoặc kép, dấu gạch chéo ngược đứng sau một trong các ký tự này sẽ bị loại bỏ. Dấu gạch chéo ngược đứng trước các ký tự không có nghĩa đặc biệt không được sửa đổi. Một dấu ngoặc kép có thể được trích dẫn trong dấu ngoặc kép bằng cách đặt trước nó bằng dấu gạch chéo ngược. Nếu được bật, mở rộng lịch sử sẽ được thực hiện trừ khi !
xuất hiện trong dấu ngoặc kép được thoát bằng dấu gạch chéo ngược. Dấu gạch chéo ngược trước dấu !
không bị xóa. Các tham số đặc biệt *
và @
có ý nghĩa đặc biệt khi ở trong dấu ngoặc kép (xem Mở rộng Tham số Shell).
Trong trường hợp cụ thể được hỏi trong câu hỏi, $ COLUMNS là một biến đặc biệt có thuộc tính không chuẩn (xem câu trả lời của lhunath ở trên).