Unix / Linux - Cơ chế trích dẫn Shell
Trong chương này, chúng ta sẽ thảo luận chi tiết về các cơ chế trích dẫn Shell. Chúng ta sẽ bắt đầu bằng cách thảo luận về siêu ký tự.
Siêu nhân vật
Unix Shell cung cấp các siêu ký tự khác nhau có ý nghĩa đặc biệt khi sử dụng chúng trong bất kỳ Tập lệnh Shell nào và gây ra sự kết thúc của một từ trừ khi được trích dẫn.
Ví dụ, ? khớp với một ký tự trong khi liệt kê các tệp trong thư mục và *khớp với nhiều hơn một ký tự. Đây là danh sách hầu hết các ký tự đặc biệt của shell (còn được gọi là siêu ký tự) -
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Một ký tự có thể được trích dẫn (tức là, được tạo ra để thay thế cho chính nó) bằng cách đặt trước nó bằng một \.
Thí dụ
Ví dụ sau đây cho thấy cách in một * hoặc một ? -
#!/bin/sh
echo Hello; Word
Khi thực hiện, bạn sẽ nhận được kết quả sau:
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Bây giờ chúng ta hãy thử sử dụng một ký tự được trích dẫn -
#!/bin/sh
echo Hello\; Word
Khi thực hiện, bạn sẽ nhận được kết quả sau:
Hello; Word
Các $ dấu hiệu là một trong những ký tự siêu, vì vậy nó phải được trích dẫn để tránh xử lý đặc biệt bởi shell -
#!/bin/sh
echo "I have \$1200"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
I have $1200
Bảng sau liệt kê bốn hình thức trích dẫn:
Sr.No. | Trích dẫn & Mô tả |
---|---|
1 | Single quote Tất cả các ký tự đặc biệt giữa các dấu ngoặc kép này sẽ mất đi ý nghĩa đặc biệt của chúng. |
2 | Double quote Hầu hết các ký tự đặc biệt giữa các dấu ngoặc kép này đều mất đi ý nghĩa đặc biệt với những ngoại lệ này -
|
3 | Backslash Bất kỳ ký tự nào ngay sau dấu gạch chéo ngược sẽ mất đi ý nghĩa đặc biệt của nó. |
4 | Back quote Bất kỳ thứ gì ở giữa các dấu ngoặc kép sẽ được coi như một lệnh và sẽ được thực thi. |
Báo giá đơn
Hãy xem xét một lệnh echo có chứa nhiều ký tự shell đặc biệt -
echo <-$1500.**>; (update?) [y|n]
Đặt dấu gạch chéo ngược trước mỗi ký tự đặc biệt thật tẻ nhạt và làm cho dòng 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ự. Đặt một dấu nháy đơn (') ở đầu và cuối chuỗi -
echo '<-$1500.**>; (update?) [y|n]'
Các ký tự trong dấu ngoặc kép được trích dẫn giống như dấu gạch chéo ngược phía trước mỗi ký tự. Với điều này, lệnh echo sẽ hiển thị theo cách thích hợp.
Nếu một dấu nháy đơn xuất hiện trong một chuỗi được xuất ra, bạn không nên đặt toàn bộ chuỗi trong dấu nháy đơn, thay vào đó bạn nên đặt trước bằng cách sử dụng dấu gạch chéo ngược (\) như sau:
echo 'It\'s Shell Programming
Dấu ngoặc kép
Cố gắng thực thi tập lệnh shell sau. Tập lệnh shell này sử dụng một trích dẫn duy nhất -
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Khi thực hiện, bạn sẽ nhận được kết quả sau:
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Đây không phải là những gì phải được hiển thị. Rõ ràng là các dấu ngoặc kép ngăn cản sự thay thế biến. Nếu bạn muốn thay thế các giá trị biến và để làm cho dấu phẩy ngược hoạt động như mong đợi, thì bạn cần đặt các lệnh của mình trong dấu ngoặc kép như sau:
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
ZARA owes <-$1500.**>; [ as of (07/02) ]
Dấu ngoặc kép lấy đi ý nghĩa đặc biệt của tất cả các ký tự ngoại trừ những ký tự sau:
$ để thay thế tham số
Dấu ngoặc kép để thay thế lệnh
\$ để kích hoạt ký hiệu đô la theo nghĩa đen
\` để kích hoạt dấu ngoặc kép theo nghĩa đen
\" để bật dấu ngoặc kép được nhúng
\\ để bật dấu gạch chéo ngược được nhúng
Tất cả những thứ khác \ các ký tự là chữ (không đặc biệt)
Các ký tự trong dấu ngoặc kép được trích dẫn giống như dấu gạch chéo ngược phía trước mỗi ký tự. Điều này giúp lệnh echo hiển thị đúng.
Nếu một dấu nháy đơn xuất hiện trong một chuỗi được xuất ra, bạn không nên đặt toàn bộ chuỗi trong dấu nháy đơn, thay vào đó bạn nên đặt trước bằng cách sử dụng dấu gạch chéo ngược (\) như sau:
echo 'It\'s Shell Programming'
Các báo sau
Đặt bất kỳ lệnh Shell nào ở giữa backquotes thực hiện lệnh.
Cú pháp
Đây là cú pháp đơn giản để đặt bất kỳ Shell nào command ở giữa các dấu ngoặc kép -
var=`command`
Thí dụ
Các date lệnh được thực thi trong ví dụ sau và kết quả được tạo ra được lưu trữ trong biến DATA.
DATE=`date`
echo "Current Date: $DATE"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
Current Date: Thu Jul 2 05:28:45 MST 2009