Nhân vật thoát theo nghĩa đen trong Powershell là gì?


51

Khi bao gồm một ký tự trích dẫn bằng chữ bên trong một chuỗi được trích dẫn trong Powershell, làm thế nào để tôi thoát khỏi ký tự trích dẫn để chỉ ra đó là một ký tự thay vì một ký tự chuỗi?

Câu trả lời:


75

Từ help about_quoting_rules

Để làm cho dấu ngoặc kép xuất hiện trong một chuỗi, hãy đặt toàn bộ chuỗi trong dấu ngoặc kép. Ví dụ:

'As they say, "live and learn."'

Đầu ra từ lệnh này là:

As they say, "live and learn."

Bạn cũng có thể gửi một chuỗi trích dẫn đơn trong một chuỗi trích dẫn kép. Ví dụ:

"As they say, 'live and learn.'"

Đầu ra từ lệnh này là:

As they say, 'live and learn.'

Để buộc Windows PowerShell diễn giải một dấu ngoặc kép theo nghĩa đen, hãy sử dụng ký tự backtick. Điều này ngăn Windows PowerShell diễn giải dấu ngoặc kép dưới dạng dấu phân cách chuỗi. Ví dụ:

"Use a quotation mark (`") to begin a string."

Đầu ra từ lệnh này là:

Use a quotation mark (") to begin a string.

Vì nội dung của các chuỗi trích dẫn đơn được diễn giải theo nghĩa đen, bạn không thể sử dụng ký tự backtick để buộc diễn giải ký tự theo nghĩa đen trong một chuỗi trích dẫn đơn.

Việc sử dụng ký tự backtick để thoát các dấu ngoặc kép khác trong các chuỗi trích dẫn đơn không được hỗ trợ trong các phiên bản gần đây của PowerShell. Trong các phiên bản trước của PowerShell, ký tự thoát backtick có thể được sử dụng để thoát ký tự dấu ngoặc kép trong một chuỗi được trích dẫn như chi tiết trong help about_quotingtài liệu có sẵn trong các phiên bản PowerShell đó.


2
Chỉ là một ghi chú, nhưng nó xuất hiện như thể bạn không thể thoát khỏi dấu ngoặc đơn Ví dụ cuối cùng của bạn không hợp lệ. Có lẽ điều gì đó đã thay đổi kể từ bài đăng của bạn, vì tôi cũng không thể tìm thấy about_quotingsự giúp đỡ đó. Chạy powershell v5.1. Thoát dấu ngoặc kép hoặc lồng các loại dấu ngoặc kép khác nhau vẫn hoạt động như mong đợi.
Kal Zekdor

1
Thú vị - có vẻ như hỗ trợ cho việc thoát dấu ngoặc đơn là một lỗi. Tệp trợ giúp about_quote đã được thay thế bằng about_quote_rules và thông báo rõ ràng rằng bạn không thể sử dụng backtick để thoát các trích dẫn đơn trong PowerShell v5 vì các chuỗi được trích dẫn là bằng chữ. Bắt tốt, điều này khác ở V3.
Helvick

1
Lưu ý rằng các trích dẫn đơn được thoát bằng cách nhân đôi chúng trong các chuỗi trích dẫn đơn, như trong SQL. Do đó , 'As they say, ''live and learn.'''đầu ra As they say, 'live and learn.', giống như ví dụ thứ hai của bạn.
brianary

13

Ký tự thoát trong Powershell là "` "(dấu nháy đơn / mộ lạc hậu).

Điều này có thể được sử dụng để thoát dấu ngoặc kép và cả các ký tự đặc biệt (ví dụ: tab là `t).


2
Điều này có thể sẽ khiến bashngười dùng điên rồ. (Nhân cmd.exevật thoát là ^)
grawity

2
Chà, nếu bạn nheo mắt thì nó trông giống như một dấu gạch chéo ngược.
koenigdmj

10

Để khen những gì đã được cung cấp ở đây, bạn cũng nên biết rằng bạn có thể thoát khỏi một trích dẫn (đơn hoặc đôi) với chính trích dẫn đó. Điều đó có nghĩa là bạn có thể làm điều này:

"Đây là một ví dụ về" "chuỗi trích dẫn kép" "."

và cái này:

'Lần này là' 'trích dẫn đơn' '.'

Ưu điểm mà cú pháp này cung cấp rất đơn giản: dễ dàng hơn để nhập cùng một trích dẫn hai lần so với thoát khỏi một trích dẫn với một backtick.


1

một 'văn bản' để nó được coi là văn bản bằng chữ, sau đó thoát khỏi bất kỳ ký tự đặc biệt nào bằng cách sử dụng "\"

ví dụ: Chuỗi này: "Như họ nói," sống và học. "" Trở thành chuỗi này 'Như họ nói, \ "sống và học. \"'


1
Không có trong PowerShell, nó không. PS C: ' "sống và học \" Khi họ nói, \ "sống và học \" \ WINDOWS \ system32> Write-Host Khi họ nói, \
HopelessN00b

1
@ HoplessN00b có thể chúng ta đừng phán xét quá gay gắt - điều này hoạt động nếu bạn đang sử dụng PowerShell.exe -Commandvà cố gắng vượt qua dấu ngoặc kép trong tham số (về mặt kỹ thuật, đó là CMD thoát nó, nhưng hợp lệ trong tham số lệnh). imgur.com/1btjoQW
jparnell8839
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.