Các kỹ thuật trích dẫn trong Unix/Linux
Các siêu ký tự trong Unix/Linux
Shell cung cấp các siêu ký tự đa dạng mà có ý nghĩa đặc biệt trong khi sử dụng chúng trong bất kỳ Shell script nào và gây ra sự giới hạn của một từ trừ khi được trích dẫn.
Ví dụ: siêu ký tự ? kết nối với một ký tự đơn trong khi liệt kê các file trong một thư mục và siêu ký tự * sẽ kết nối nhiều hơn một ký tự. Dưới đây liệt kê một danh sách của hầu hết các ký tự đặc biệt trong shell (cũng được gọi là siêu ký tự).
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Một ký tự có thể được trích dẫn bằng cách đặt trước nó với một dấu \.
Ví dụ trong Unix/Linux:
Dưới đây là ví dụ chỉ cách để in một * hoặc một ?:
#!/bin/sh echo Hello; Word
Nó sẽ tạo ra kết quả sau:
Hello ./test.sh: line 2: Word: command not found shell returned 127
Bây giờ chúng ta sử dụng một ký tự được trích dẫn:
#!/bin/sh echo Hello\; Word
Nó sẽ tạo ra kết quả:
Hello; Word
Ký hiệu $ là một siêu ký tự, vì thế nó phải được trích dẫn để tránh shell thực hiện các công việc đặc biệt liên quan đến nó:
#!/bin/sh echo "I have $1200"
Code trên tạo ra kết quả sau:
I have $1200
Có 4 kiểu mẫu trích dẫn được chúng tôi liệt kê trong bảng sau:
Trích dẫn | Miêu tả |
---|---|
Trích dẫn đơn | Tất cả các ký tự ở giữa trích dẫn này không còn ý nghĩa đặc biệt nữa với shell. |
Trích dẫn kép | Hầu hết các ký tự giữa trích dẫn này không còn ý nghĩa đặc biệt, trừ các ký tự sau:
|
Dấu gạch chéo ngược | Bất kỳ ký tự nào đằng sau dấu chéo ngược \ không còn ý nghĩa đặc biệt của nó. |
Trích dẫn ngược (``) | Bất kỳ ký tự nào ở giữa trích dẫn ngược được shell đối xử như là một lệnh và được chạy. |
Các trích dẫn đơn trong Unix/Linux:
Chúng ta xem xét một lệnh echo mà chứa nhiều ký tự đặc biệt trong shell sau:
echo <-$1500.**>; (update?) [y|n]
Đặt một dấu chéo ngược (\) ở trước mỗi ký tự đặc biệt là một việc gây chán ngắt và làm cho code khó để đọc.
echo \<-$1500.\*\*\>\; \(update\?\) \[y\|n\]
Có một cách dễ dàng để trích dẫn một nhóm lớn các ký tự. Chúng ta đặt một trích dẫn đơn (`)tại phần đầu và cuối của chuỗi:
echo '<-$1500.**>; (update?) [y|n]'
Bất kỳ ký tự nào trong trích dẫn đơn được trích dẫn tương tự như có một dấu chéo ngược trước mỗi ký tự. Vì thế, bây giờ mỗi lệnh echo này hiển thị một cách chính xác.
Nếu một trích dẫn đơn xuất hiện trong một chuỗi để tạo kết quả đầu ra, bạn không nên đặt toàn bộ chuỗi trong trích dẫn đơn, thay vào đó bạn nên đặt trước chúng một dấu \ như sau:
echo 'It\'s Shell Programming'
Trích dẫn kép trong Unix/Linux
Bạn đang cố gắng để chạy Shell script sau. Script này sử dụng trích dẫn đơn:
VAR=ZARA echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Nó sẽ tạo ra kết quả sau:
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Nhưng nó không phải thứ mà bạn muốn hiển thị. Như vậy rõ ràng là trích dẫn đơn ngăn cản trình thay thế biến. Nếu bạn muốn thay thế giá trị của biến và thực hiện công việc sau dấu phảy như bạn mong đợi thì khi đó bạn cần đặt các lệnh của bạn trong trích dẫn kép như sau:
VAR=ZARA echo "$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]"
Nó sẽ tạo ra kết quả sau:
ZARA owes <-$1500.**>; [ as of (07/02) ]
Trích dẫn kép loại bỏ ý nghĩa đặc biệt của tất cả ký tự đặc biệt trừ các trường hợp sau:
$ cho trình thay thế tham số
Trích dẫn ngược cho trình thay thế lệnh
$ thể hiện bằng chữ của ký hiệu Đôla
\` thể hiện bằng chữ của ký hiệu trích dẫn ngược
\" cho phép trích dẫn kép được nhúng
\\ cho phép ký tự dấu gạch chéo ngược được nhúng
Tất cả các dạng "\ký tự" khác được biểu hiện bằng ý nghĩa chữ của nó (không phải đặc biệt)
Bất kỳ ký tự nào trong trích dẫn đơn được trích dẫn như là một dấu chéo ngược ở phần trước mỗi ký tự. Vì thế bây giờ lệnh echo này hiển thị chính xác.
Nếu một trích dẫn đơn xuất hiện trong một chuỗi ở kết quả đầu ra, bạn không nên đặt toàn bộ chuỗi trong trích dẫn đơn mà thay vào đó bạn nên đặt trước nó một dấu chéo ngược như sau:
echo 'It\'s Shell Programming'
Trích dẫn ngược trong Unix/Linux
Đặt bất kỳ lệnh shell vào giữa các trích dẫn ngược thì shell sẽ thi hành lệnh đó.
Cú pháp
Đây là cú pháp đơn giản để đặt bất kỳ lệnh Shell nào vào giữa trích dẫn ngược:
Ví dụ:
var=`command`
Ví dụ:
Sau đây chúng tôi sẽ chạy lệnh date và giữ kết quả trong biến DATA:
DATE=`date` echo "Current Date: $DATE"
Nó tạo ra kết quả là:
Current Date: Thu Jul 2 05:28:45 MST 2009
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.
Các bài học UNIX phổ biến khác tại VietJack:
- Quản lý File
- Thư mục
- Quyền truy cập File
- Cài đặt Unix/Linux
- Các tiện ích cơ bản
- Các Pipe & Bộ lọc (Filter)