Tiếng Việt
Unix / Linux - Cơ Chế Trích Dẫn
Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ cùng khám phá thế giới kỳ diệu của các cơ chế trích dẫn trong shell của Unix và Linux. Là người dạy máy tính hàng xóm thân thiện của bạn, tôi ở đây để hướng dẫn bạn từng bước trong hành trình này. Đừng lo lắng nếu bạn chưa bao giờ lập trình trước đây - chúng ta sẽ bắt đầu từ những điều cơ bản nhất và dần dần nâng cao. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và chúng ta cùng bắt đầu nhé!
Các Ký Tự Đặc Biệt
Trước khi chúng ta nhảy vào trích dẫn, chúng ta cần hiểu các ký tự đặc biệt là gì. Trong shell, các ký tự đặc biệt là những ký tự có ý nghĩa đặc biệt. Chúng giống như gia vị trong món ăn yêu thích của bạn - một chút đã đi một đoạn đường dài!
Dưới đây là bảng các ký tự đặc biệt phổ biến:
Ký tự đặc biệt | Ý nghĩa |
---|---|
* | Tô màu (khớp với bất kỳ số lượng ký tự nào) |
? | Tô màu (khớp với bất kỳ ký tự đơn nào) |
> | Chuyển hướng đầu ra |
< | Chuyển hướng đầu vào |
& | Chạy lệnh ở后台 |
; | Phân cách lệnh |
() | Nhóm lệnh |
[] | Lớp ký tự |
Hãy xem một ví dụ:
ls *.txt
Trong lệnh này, *
là một ký tự đặc biệt. Nó告诉 shell liệt kê tất cả các tệp kết thúc bằng .txt
. Thật tuyệt vời phải không?
Nhưng nếu chúng ta thực sự muốn sử dụng các ký tự này như các ký tự bình thường? Đó là lúc trích dẫn vào cuộc!
Dấu ngoặc đơn
Dấu ngoặc đơn là hình thức trích dẫn đơn giản nhất. Chúng告诉 shell coi mọi thứ bên trong chúng như là các ký tự литера. Đó giống như đặt lời của bạn trong một quả bóng bảo vệ!
Hãy thử một ví dụ:
echo 'The * is a wildcard character'
Kết quả:
The * is a wildcard character
Thấy không? Ký tự *
không mở rộng để liệt kê tất cả các tệp. Nó được coi là một ký tự bình thường.
Dấu ngoặc đơn rất tốt khi bạn muốn giữ nguyên giá trị литера của mỗi ký tự trong một chuỗi. thậm chí các ký tự trích dẫn khác cũng mất đi ý nghĩa đặc biệt của chúng bên trong dấu ngoặc đơn!
echo 'This is a $VARIABLE with "double quotes" inside'
Kết quả:
This is a $VARIABLE with "double quotes" inside
Mọi thứ bên trong dấu ngoặc đơn đều được in chính xác như vậy. Không có thay thế, không có giải thích. Chỉ có văn bản thuần túy, không bị thay đổi!
Dấu ngoặc kép
Dấu ngoặc kép linh hoạt hơn so với người anh em dấu ngoặc đơn của chúng. Chúng giữ nguyên giá trị литера của hầu hết các ký tự, nhưng vẫn cho phép một số thay thế. Đó giống như một màng bán thấm cho văn bản của bạn!
Dưới đây là những gì dấu ngoặc kép cho phép:
- Thay thế biến
- Thay thế lệnh
- Tránh thoát
Hãy xem một số ví dụ:
NAME="Alice"
echo "Hello, $NAME!"
Kết quả:
Hello, Alice!
Biến $NAME
đã được thay thế bằng giá trị của nó. Thật kỳ diệu!
Bây giờ, hãy thử thay thế lệnh:
echo "Today's date is $(date)"
Kết quả:
Today's date is Tue May 23 10:30:45 PDT 2023
Phần $(date)
đã được thay thế bằng đầu ra của lệnh date
. Thật tuyệt vời phải không?
Nhưng hãy nhớ rằng, một số ký tự vẫn giữ nguyên ý nghĩa đặc biệt của chúng bên trong dấu ngoặc kép:
echo "This is a newline: \n And this is a tab: \t"
Kết quả:
This is a newline:
And this is a tab:
Ký tự \n
và \t
đã được giải thích là một ký tự xuống dòng và một tab tương ứng.
Dấu ngoặc kép ngược
Dấu ngoặc kép ngược, còn được gọi là backticks, là một hình thức cũ của thay thế lệnh. Chúng giống như những người du hành thời gian từ những ngày đầu của Unix!
Dưới đây là cách chúng hoạt động:
echo "The current directory contains `ls | wc -l` files"
Kết quả:
The current directory contains 42 files
Lệnh giữa các dấu ngoặc kép (ls | wc -l
) được thực thi, và đầu ra của nó được thay thế vào chuỗi.
Mặc dù backticks vẫn hoạt động, nhưng cú pháp $()
hiện đại thường được ưa thích hơn:
echo "The current directory contains $(ls | wc -l) files"
Cú pháp này làm cùng một điều nhưng dễ hơn để lồng và, theo ý kiến cá nhân của tôi, dễ đọc hơn. Nó giống như nâng cấp từ điện thoại nắp trượt lên điện thoại thông minh - cùng một chức năng cơ bản, nhưng thân thiện hơn với người dùng!
Kết hợp tất cả lại với nhau
Bây giờ chúng ta đã khám phá tất cả các cơ chế trích dẫn, hãy kết hợp chúng trong một đoạn mã nhỏ vui vẻ:
#!/bin/bash
NAME="World"
GREETING='Hello'
DATE=$(date +"%A, %B %d, %Y")
echo "$GREETING, $NAME!"
echo 'Today is not actually $DATE'
echo "But for real, today is $DATE"
echo "There are `ls | wc -l` files in this directory"
Nếu chúng ta chạy đoạn mã này, chúng ta có thể nhận được kết quả như sau:
Hello, World!
Today is not actually $DATE
But for real, today is Tuesday, May 23, 2023
There are 42 files in this directory
Bạn có thấy cách mỗi loại trích dẫn ảnh hưởng đến đầu ra không? Dấu ngoặc đơn giữ nguyên mọi thứ, dấu ngoặc kép cho phép thay thế, và backticks (hoặc $()
) thực hiện thay thế lệnh.
Và thế là bạn đã bước vào thế giới của các cơ chế trích dẫn trong shell. Hãy nhớ, thực hành là chìa khóa, vì vậy đừng ngần ngại thử nghiệm với các khái niệm này. Trước khi bạn biết điều đó, bạn sẽ thành thạo việc trích dẫn!
Chúc các bạn lập trình vui vẻ, và may mắn với shell! ??
Credits: Image by storyset