Việc sử dụng các dấu trích dẫn là rất quan trọng trong lập trình shell. Shell sử dụng cả hai kiểu dấu trích dẫn và ký tự và dấu gạch chéo ngược để thực hiện các chức năng khác nhau. Cả dấu nháy kép (""), dấu nháy đơn (''), và dấu gạch ngược (\) được sử dụng để ẩn các ký tự đặc biệt trong shell. Các dấu nháy có một ý nghĩa đặc biệt trong shell và nó không nên sử dụng để chứa các xâu. Mỗi một phương thức có một mức độ che dấu khác nhau các ký tự đặc biêtk trong shell.
Khi bạn bao quanh các ký tự với dấu nháy kép, tất cả các ký tự trống được ẩn trong shell, nhưng tất cả các ký tự khác vẫn được thông dịch. Kiểu dấu nháy kép này sử dụng hữu ích nhất khi bạn gán các chuỗi chứa nhiều hơn một từ vào một biến. Ví dụ, để gán chuỗi
hello there cho biến greeting, nhập vào câu lệnh sau:
greeting="hello there" (in bash and pdksh) set greeting = "hello there" (in tcsh)
Câu lệnh này lưu trữ toàn bộ chuỗi hello there vào biến greeting như một từ. Nếu bạn
gõ vào câu lệnh mà không sử dụng dấu nháy kép, bash và pdksh có thể không hiểu câu lệnh và có thể trả lại một thông báo lỗi, và tcsh có thể gán giá trị hello cho biến greeting và bỏ qua phần đuôi của dòng lệnh.
Dấu nháy đơn là hình thức sử dụng mạnh nhất của dấu nháy. Chúng ẩn tất cả các ký tự đặc biệt trong shell. Kiểu dấu nháy này hữu ích nếu câu lệnh của bạn đưa vào có dụng ý cho
ĐẠI HỌC TÔN ĐỨC THẮNG Trang 61/77
Hệ điều hành Linux GV: Nguyễn Việt Hùng - Trần Quang Bình
một chương trình hơn là cho shell. Ví dụ, bạn có thể sử dụng dấu nháy đơn để ghi chuỗi hello there, nhưng bạn không thể sử dụng phương thức này trong một số trường hợp. Ví dụ, nếu chuỗi được gán cho biến greeting chứa biến khác, bạn phải sử dụng dấu nháy kép. Giả sử rằng bạn muốn đưa tên của người sử dụng trong biến greeting. Bạn gõ câu lệnh sau:
greeting="hello there $LOGNAME" (for bash and pdksh) set greeting="hello there $LOGNAME" (for tcsh)
Biến LOGNAME là một biến shell chứa tên đăng nhập của người sử dụng Linux đã đăng nhập hệ thống.
Câu lệnh này lưu trữ giá trị hello there root vào trong biến greeting nếu bạn đã đăng
nhập vào Linux là root. Nếu bạn cố ghi câu lệnh này sử dụng dấu nháy đơn, dấu nháy đơn sẽ làm ẩn dấu $ trong shell, và shell không biết rằng nó được yêu cầu thực hiện thay thế một
biến. Kết quả, biến greeting được gán giá trị hello there $LOGNAME.
Sử dụng dấu gạch ngược là cách thứ ba để che dấu các ký tự đặc biệt trong shell. Giống như phương thức dấu nháy đơn, dấu gạch ngược ẩn tất cả các ký tự đặc biệt trong shell, nhưng nó chỉ có thể ẩn một ký tự tại một thời điểm, chứ không phải một nhóm các ký tự. Bạn có thể viết lại ví dụ greeting sử dụng dấu gạch ngược thay cho dấu nháy kép bằng cách sử dụng câu lệnh sau:
greeting=hello\ there (for bash and pdksh) set greeting=hello\ there (for tcsh)
Trong câu lệnh này, dấu gạch ngược ẩn ký tự trống trong shell và chuỗi hello there được gán
cho biến greeting.
Dấu gạch ngược thường được sử dụng nhiều nhất khi bạn muốn ẩn chỉ một ký tự trong shell. Vấn đề này xuất hiện khi bạn muốn đưa vào một ký tự đặc biệt trong một chuỗi. Ví dụ, để lưu giá của một hộp đĩa máy tính vào một biến có tên là disk_price, sử dụng câu lệnh sau. disk_price=\$5.00 (for bash and pdksh)
set disk_price = \$5.00 (tcsh)
Dấu gạch ngược trong ví dụ này ẩn dấu đô la trong shell. Nếu dấu gạch ngược không có ở đó, shell có thể cố tìm một biến có tên là 5 và thực hiện một phép thay thế biến trên biến đó. Nếu không có biến tên là 5 được định nghĩa, shell có thể một gán giá trị .00 cho biến disk_price. ( shell này có thể thay thế một giá trị rỗngcho biến $5 ) Bạn cũng có thể sử dụng dấu nháy đơn trong ví vụ disk_price để ẩn ký hiệu $ trong shell.
Dấu nháy ngược (``) thực hiện một chức năng khác. Bạn sử dụng chúng khi bạn muốn sử dụng các kết quả của một câu lệnh trong một câu lệnh khác. Ví dụ, để đặt giá trị của biến contents bằng danh sách các file có trong thư mục hiện tại, gõ câu lệnh sau:
contents=`ls` (for bash and pdksh) set contents = `ls` (for tcsh)
Câu lệnh này thực thi câu lệnh ls và lưu kết quả của câu lệnh vào biến contents . Như sẽ được chỉ ra trong các đoạn sau, đặc điểm này có thể rất hữu ích khi bạn muốn ghi kết quả của một chương trình shell thực hiện một vài hoạt động vào trong một câu lệnh khác.