Làm cách nào để lặp lại các trích dẫn trong bash?

Là người mới bắt đầu trong hệ sinh thái Linux, chúng ta có thể bắt gặp các đối số trong một số lệnh mà chúng ta đọc được trên mạng. Đôi khi, chúng tôi đặt các đối số này trong dấu ngoặc kép, đôi khi trong dấu ngoặc đơn và đôi khi chúng tôi hoàn toàn không đặt chúng trong dấu ngoặc kép. Trong bài viết này, chúng ta sẽ xem xét các tình huống khác nhau trong đó có thể sử dụng hoặc bỏ qua các câu trích dẫn khác nhau và hiểu cách hoạt động của câu trích dẫn

2. chuỗi có khoảng trắng

Trong các tình huống khi chúng ta có chuỗi ký tự hoặc đối số có khoảng trắng trong đó, chúng ta có thể sử dụng dấu ngoặc đơn hoặc dấu ngoặc kép để bọc toàn bộ chuỗi để nó được xử lý như thể đó là một đối số đơn lẻ. Chúng ta có thể thử điều này bằng lệnh expr

$ expr length "hello world"
11
$ expr length 'hello world'
11
$ expr length hello world
expr: syntax error: unexpected argument ‘world’

Khi chúng tôi sử dụng dấu ngoặc đơn hoặc dấu ngoặc kép, “hello world” được coi là một đối số duy nhất và độ dài ước tính là 11. Khi chúng tôi bỏ qua các dấu ngoặc kép, “xin chào” và “thế giới” được coi là các đối số riêng biệt và lệnh sẽ báo lỗi vì nó chỉ mong đợi một đối số cho thao tác độ dài

3. Kiểm soát nội suy biến

Nội suy biến xảy ra khi chúng ta sử dụng dấu ngoặc kép hoặc bỏ qua dấu ngoặc kép. Khi chúng ta cần loại bỏ phép nội suy biến, chúng ta sẽ bọc các đối số trong dấu nháy đơn. Chúng ta có thể thấy điều này trong thực tế bằng cách sử dụng một vài ví dụ

$ a=hello
$ b=world
$ echo $a
hello
$ echo "$a"
hello
$ echo "$a $b"
hello world
$ echo '$a $b'
$a $b

Trong các ví dụ trên, chúng tôi đã xác định hai biến, 'a' và 'b', và chúng tôi thấy các giá trị của chúng được thay thế khi chúng tôi sử dụng dấu ngoặc kép hoặc bỏ qua dấu ngoặc kép. Khi chúng tôi sử dụng dấu nháy đơn, tên biến được in nguyên văn vì không xảy ra thay thế

4. Lệnh thay thế

Tương tự như nội suy biến, thay thế lệnh chỉ hoạt động khi chúng ta thực hiện nó bên trong dấu ngoặc kép hoặc bỏ qua dấu ngoặc kép. Dấu nháy đơn sẽ lấy nguyên văn đối số. Hãy thử một số lệnh để xem nó hoạt động như thế nào

$ echo "$[ls /usr/share/dict]"
american-english
british-english
README.select-wordlist
words
words.pre-dictionaries-common
$ echo $[ls /usr/share/dict]
american-english british-english README.select-wordlist words words.pre-dictionaries-common
$ echo '$[ls /usr/share/dict]'
$[ls /usr/share/dict]

Từ các ví dụ trên ta thấy khi sử dụng dấu nháy kép hoặc bỏ dấu ngoặc kép thì câu lệnh nằm trong dấu ngoặc nhọn sẽ được thực thi và kết quả được in ra. Khi chúng ta sử dụng dấu nháy đơn, lệnh không được thực thi, nhưng đối số được in nguyên văn

5. Kiểm soát tập tin toàn cầu

Chúng ta có thể sử dụng dấu ngoặc đơn hoặc dấu ngoặc kép để chặn toàn cầu hóa tệp. Nếu chúng ta cần tập tin toàn cầu để hoạt động, chúng ta cần bỏ qua các dấu ngoặc kép

$ cat *
file1 contents
file2 contents
file3 contents
$ cat "*"
cat: '*': No such file or directory
$ cat '*'
cat: '*': No such file or directory
$ cat "my dir/"*
file1 contents
file2 contents
file3 contents
$ cat my dir/*
cat: my: No such file or directory
cat: 'dir/*': No such file or directory

Từ các ví dụ trên, chúng ta cũng lưu ý rằng chúng ta có thể đặt khoảng trắng trong dấu ngoặc kép và đặt các ký tự đại diện bên ngoài dấu ngoặc kép để thực hiện toàn cầu hóa. Điều này hoạt động với cả dấu ngoặc đơn và dấu ngoặc kép

6. Bảo vệ trích dẫn và ký tự đặc biệt

Chúng tôi có thể sử dụng dấu ngoặc đơn để bảo vệ dấu ngoặc kép và ngược lại

$ echo he'll'o
hello
$ echo he"ll"o
hello
$ echo 'he"ll"o'
he"ll"o
$ echo "he'll'o"
he'll'o

Trong các ví dụ trên, chúng ta thấy rằng các dấu ngoặc kép trong chuỗi chỉ được giữ lại khi toàn bộ chuỗi được bao bọc trong dấu ngoặc kép. Chúng tôi cũng có tùy chọn bao gồm ký hiệu $ trước các trích dẫn đơn để các chuỗi thoát được diễn giải theo ý nghĩa của chúng. Hơn nữa, chúng ta có thể sử dụng điều này để bảo vệ dấu ngoặc đơn cũng như dấu ngoặc kép trong cùng một chuỗi

$ echo "hello\nworld"
hello\nworld
$ echo 'hello\nworld'
hello\nworld
$ echo $'hello\nworld'
hello
world
$ echo $'\'single quoted text\' and "double quoted text"'
'single quoted text' and "double quoted text"

7. Kiểm soát tách từ

Để thực hiện tách từ, chúng ta cần bỏ dấu ngoặc kép. Khi chúng tôi thêm dấu ngoặc kép, việc tách không xảy ra và toàn bộ chuỗi được xử lý dưới dạng một đơn vị

$ for word in one two three; do echo $word; done
one
two
three
$ for word in "one two three"; do echo $word; done
one two three
$ for word in 'one two three'; do echo $word; done
one two three

Trong trường hợp đầu tiên, vòng lặp chạy ba lần vì quá trình tách từ xảy ra và tạo ra ba từ, trong khi ở các trường hợp sau, vòng lặp chỉ chạy một lần với toàn bộ chuỗi làm giá trị

8. Phần kết luận

Trong bài viết này, chúng ta đã xem xét các hiệu ứng khác nhau của ba loại đối số trích dẫn và điều gì sẽ xảy ra khi không sử dụng trích dẫn. Hãy tóm tắt những điểm chính dưới đây để tham khảo nhanh

Kịch bản Trích dẫn đôi Trích dẫn đơnKhông có trích dẫnKhoảng trắng được phép trong đối sốCóCóKhôngNội suy biếnCóKhôngCóThay thế lệnhCóKhôngCóĐánh dấu toàn cầu tập tinKhôngKhôngCóCóTách từKhôngCóCóBảo vệ trích dẫnDấu ngoặc đơnDấu ngoặc đơnKhông có

Lưu ý rằng chúng ta có thể sử dụng trích dẫn shell cùng với các chuỗi thoát nếu chúng ta cần bảo vệ cả dấu ngoặc đơn và dấu ngoặc kép trong một chuỗi

tác giả dưới cùng

Nếu bạn có một vài năm kinh nghiệm trong hệ sinh thái Linux và bạn muốn chia sẻ trải nghiệm đó với cộng đồng, hãy xem Nguyên tắc đóng góp của chúng tôi

Làm cách nào để sử dụng tiếng vang trong Bash?

Lệnh 'echo' được sử dụng với tùy chọn '-e' trong tập lệnh sau. Đối với điều này, chức năng của dấu gạch chéo ngược [\] được bật và đầu ra được tạo bằng cách thêm khoảng trắng 'tab' trong đó '\ t' được sử dụng trong chuỗi. Đầu ra sau sẽ xuất hiện sau khi chạy tập lệnh.

Làm cách nào để lặp lại các ký tự đặc biệt trong tập lệnh shell?

Ký tự gạch chéo ngược [\] được sử dụng để đánh dấu các ký tự đặc biệt này để trình bao không hiểu chúng, nhưng được chuyển sang lệnh đang chạy [ví dụ: echo . Vì vậy, để xuất chuỗi. [Giả định rằng giá trị của $X là 5]. Một trích dẫn là ", dấu gạch chéo ngược là \, dấu gạch ngược là `. Một vài dấu cách là và đô la là $.

Làm cách nào để in tiếng vang trong tập lệnh Shell?

Cú pháp lệnh lặp lại . Ví dụ: sử dụng lệnh sau để in Hello, World. như đầu ra. echo Xin chào, Thế giới. Lưu ý. Sử dụng lệnh echo mà không có bất kỳ tùy chọn nào sẽ trả về chuỗi được cung cấp làm đầu ra mà không có thay đổi nào.

Chủ Đề