เกี่ยวกับตัวละครพิเศษ
คำอธิบายสั้น ๆ
อธิบายลำดับอักขระพิเศษที่ควบคุมวิธีที่ PowerShell ตีความอักขระถัดไปในลำดับ
คำอธิบายยาว
PowerShell รองรับชุดลำดับอักขระพิเศษที่ใช้เพื่อแสดงอักขระที่ไม่ได้เป็นส่วนหนึ่งของชุดอักขระมาตรฐาน ลำดับนี้เรียกกันทั่วไปว่า ลำดับการหลีก
ลำดับ Escape เริ่มต้นด้วยอักขระ backtick หรือที่เรียกว่า Grave Accent (ASCII 96) และคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ อักขระ backtick ยังเรียกอีกชื่อหนึ่งว่า อักขระ Escape
ลำดับ Escape จะถูกตีความเมื่อมีอยู่ในสตริงที่มีเครื่องหมายคำพูดคู่ (") เท่านั้น
PowerShell รู้จักลำดับการหลีกเลี่ยงเหล่านี้:
`0-
โมฆะ
`aเตือน
`bแบ็คสเปซ
`eEscape (เพิ่มใน PowerShell 6)
`fฟีดแบบฟอร์ม
`nสายใหม่
`rการรับรถคืน
`tแท็บแนวนอน
`u{x}ลำดับหลีก Unicode (เพิ่มใน PowerShell 6)
`vแท็บแนวตั้ง
PowerShell ยังมีโทเค็นพิเศษเพื่อทำเครื่องหมายตำแหน่งที่คุณต้องการหยุดการแยกวิเคราะห์ อักขระทั้งหมดที่ตามหลังโทเค็นนี้จะถูกใช้เป็นค่าตามตัวอักษรที่ไม่มีการตีความ
โทเค็นการแยกวิเคราะห์พิเศษ:
--ถือว่าค่าที่เหลือเป็นอาร์กิวเมนต์ ไม่ใช่พารามิเตอร์
--%หยุดแยกวิเคราะห์สิ่งที่ตามมา
~ตัวหนอน
ว่าง (`0)
อักขระ null (`0) ปรากฏเป็นพื้นที่ว่างในเอาต์พุต PowerShell ฟังก์ชันนี้ช่วยให้คุณใช้ PowerShell เพื่ออ่านและประมวลผลไฟล์ข้อความที่ใช้อักขระที่เป็นค่าว่าง เช่น การสิ้นสุดสตริงหรือตัวบ่งชี้การสิ้นสุดการบันทึก อักขระพิเศษ null ไม่เทียบเท่ากับตัวแปร $null ซึ่งเก็บค่า null
การแจ้งเตือน (`ก)
อักขระแจ้งเตือน (`a) จะส่งสัญญาณบี๊บไปยังลำโพงของคอมพิวเตอร์ คุณสามารถใช้อักขระนี้เพื่อเตือนผู้ใช้เกี่ยวกับการดำเนินการที่กำลังจะเกิดขึ้น ตัวอย่างต่อไปนี้จะส่งสัญญาณบี๊บสองตัวไปยังลำโพงของคอมพิวเตอร์ในระบบ
for ($i = 0; $i -le 1; $i++){"`a"}
แบ็คสเปซ (`ข)
อักขระ Backspace (`b) จะเลื่อนเคอร์เซอร์ไปข้างหลังหนึ่งอักขระ แต่จะไม่ลบอักขระใดๆ
ตัวอย่างเขียนคำว่า สำรองข้อมูล จากนั้นเลื่อนเคอร์เซอร์กลับไปสองครั้ง จากนั้น ที่ตำแหน่งใหม่ ให้เว้นวรรคตามด้วยคำว่า out
"backup`b`b out"
back out
หนี (`อี)
บันทึก
อักขระพิเศษนี้ถูกเพิ่มเข้ามาใน PowerShell 6.0
อักขระหลีก (`e) ถูกใช้บ่อยที่สุดเพื่อระบุลำดับเทอร์มินัลเสมือน (ลำดับหลีก ANSI) ที่ปรับเปลี่ยนสีของข้อความและคุณลักษณะข้อความอื่น ๆ เช่น การทำตัวหนาและการขีดเส้นใต้ ลำดับเหล่านี้ยังสามารถใช้สำหรับการวางตำแหน่งเคอร์เซอร์และการเลื่อน โฮสต์ PowerShell ต้องสนับสนุนลำดับเทอร์มินัลเสมือน คุณสามารถตรวจสอบค่าบูลีนของ $Host.UI.SupportsVirtualTerminal เพื่อตรวจสอบว่าลำดับ ANSI เหล่านี้ได้รับการสนับสนุนหรือไม่
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับลำดับการหลีก ANSI โปรดดูบทความรหัสการหลีก ANSI ในวิกิพีเดีย
ตัวอย่างต่อไปนี้แสดงข้อความที่มีสีพื้นหน้าเป็นสีเขียว
$fgColor = 32 # green
"`e[${fgColor}mGreen text`e[0m"
Green text
ฟีดแบบฟอร์ม (`f)
อักขระป้อนแบบฟอร์ม (`f) คือคำสั่งการพิมพ์ที่จะดีดหน้าปัจจุบันออกและพิมพ์ต่อในหน้าถัดไป อักขระป้อนแบบฟอร์มมีผลกับเอกสารที่พิมพ์เท่านั้น ไม่ส่งผลต่อเอาท์พุตของหน้าจอ
บรรทัดใหม่ (`n)
อักขระขึ้นบรรทัดใหม่ (`n) แทรกตัวแบ่งบรรทัดทันทีหลังอักขระ
ตัวอย่างนี้แสดงวิธีการใช้อักขระบรรทัดใหม่เพื่อสร้างตัวแบ่งบรรทัดในคำสั่ง Write-Host
"There are two line breaks to create a blank line`n`nbetween the words."
There are two line breaks to create a blank line
between the words.
ค่าขนส่งคืน (`r)
อักขระขึ้นบรรทัดใหม่ (`r) จะเลื่อนเคอร์เซอร์เอาต์พุตไปที่จุดเริ่มต้นของบรรทัดปัจจุบันและเขียนต่อ อักขระใดๆ ในบรรทัดปัจจุบันจะถูกเขียนทับ
ในตัวอย่างนี้ ข้อความก่อนการขึ้นบรรทัดใหม่จะถูกเขียนทับ
Write-Host "These characters are overwritten.`rI want this text instead "
โปรดสังเกตว่าข้อความที่อยู่หน้าอักขระ `r จะไม่ถูกลบ แต่จะถูกเขียนทับ
I want this text instead written.
แท็บแนวนอน (`t)
อักขระแท็บแนวนอน (`t) จะเลื่อนไปยังแท็บหยุดถัดไปและเขียนต่อที่จุดนั้น ตามค่าเริ่มต้น คอนโซล PowerShell มีแท็บหยุดทุกๆ ช่องว่างที่แปด
ตัวอย่างนี้จะแทรกสองแท็บระหว่างแต่ละคอลัมน์
"Column1`t`tColumn2`t`tColumn3"
Column1 Column2 Column3
อักขระยูนิโค้ด (`u{x})
บันทึก
อักขระพิเศษนี้ถูกเพิ่มเข้ามาใน PowerShell 6.0
ลำดับหลีก Unicode (`u{x}) ช่วยให้คุณสามารถระบุอักขระ Unicode ใดๆ ได้ด้วยการแสดงเลขฐานสิบหกของจุดโค้ด ซึ่งรวมถึงอักขระ Unicode ที่อยู่เหนือระนาบหลายภาษาขั้นพื้นฐาน (> 0xFFFF) ซึ่งรวมถึงอักขระอีโมจิ เช่น ยกนิ้วโป้งขึ้น (`u{1F44D}) อักขระ. ลำดับหลีก Unicode ต้องมีเลขฐานสิบหกอย่างน้อยหนึ่งหลัก และรองรับเลขฐานสิบหกได้สูงสุดหกหลัก ค่าเลขฐานสิบหกสูงสุดสำหรับลำดับคือ 10FFFF
ตัวอย่างนี้จะแสดงสัญลักษณ์ ลูกศรขึ้นลง (↕)
"`u{2195}"
แท็บแนวตั้ง (`v)
อักขระแท็บแนวตั้ง (`v) จะเลื่อนไปยังแท็บหยุดแนวตั้งถัดไป และเขียนเอาต์พุตที่เหลือที่จุดนั้น การแสดงแท็บแนวตั้งขึ้นอยู่กับอุปกรณ์และเทอร์มินัล
Write-Host "There is a vertical tab`vbetween the words."
ตัวอย่างต่อไปนี้แสดงเอาต์พุตที่แสดงผลของแท็บแนวตั้งในสภาพแวดล้อมทั่วไปบางอย่าง
แอปพลิเคชันโฮสต์คอนโซล Windows ตีความ (`v) เป็นอักขระพิเศษโดยไม่มีการเพิ่มช่องว่างเพิ่มเติม
There is a vertical tab♂between the words.
Windows Terminal แสดงผลอักขระแท็บแนวตั้งเป็นการขึ้นบรรทัดใหม่และการป้อนบรรทัด ส่วนที่เหลือของเอาต์พุตจะถูกพิมพ์ที่จุดเริ่มต้นของบรรทัดถัดไป
There is a vertical tab
between the words.
บนเครื่องพิมพ์หรือในคอนโซลที่ใช้ระบบปฏิบัติการยูนิกซ์ อักขระแท็บแนวตั้งจะเลื่อนไปยังบรรทัดถัดไปและเขียนเอาต์พุตที่เหลือ ณ จุดนั้น
There is a vertical tab
between the words.
ต่อแถว
อักขระ backtick ยังสามารถนำมาใช้ที่ท้ายบรรทัดเป็นสัญญาณไปยังตัวแยกวิเคราะห์ PowerShell ว่าคำสั่งจะดำเนินต่อไปในบรรทัดถัดไป สำหรับข้อมูลเพิ่มเติม โปรดดูที่ about_Parsing
โทเค็นส่วนท้ายของพารามิเตอร์ (--)
โทเค็นส่วนท้ายของพารามิเตอร์ (--) ระบุว่าอาร์กิวเมนต์ทั้งหมดที่ตามมาจะถูกส่งผ่านในรูปแบบจริงราวกับว่ามีเครื่องหมายคำพูดคู่ล้อมรอบ ตัวอย่างเช่น การใช้ -- คุณสามารถส่งออกสตริง -InputObject โดยไม่ต้องใช้เครื่องหมายคำพูดหรือตีความว่าเป็นพารามิเตอร์:
Write-Output -- -InputObject
-InputObject
นี่เป็นแบบแผนที่ระบุไว้ในข้อกำหนด POSIX Shell และ Utilities
โทเค็นหยุดการแยกวิเคราะห์ (--%)
โทเค็นการแยกวิเคราะห์ (--%) ป้องกันไม่ให้ PowerShell ตีความสตริงเป็นคำสั่งและนิพจน์ของ PowerShell ซึ่งจะทำให้สตริงเหล่านั้นสามารถส่งผ่านไปยังโปรแกรมอื่นเพื่อการตีความได้
วางโทเค็นการแยกวิเคราะห์ไว้หลังชื่อโปรแกรมและก่อนอาร์กิวเมนต์ของโปรแกรมที่อาจทำให้เกิดข้อผิดพลาด
ในตัวอย่างนี้ คำสั่ง Icacls ใช้โทเค็นหยุดการแยกวิเคราะห์
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F
PowerShell ส่งสตริงต่อไปนี้ไปที่ Icacls
X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
ในตัวอย่างที่สองนี้ เราจะส่งตัวแปร $HOME ไปยังคำสั่ง cmd.exe /c echo สองครั้ง
cmd.exe /c echo $HOME --% $HOME
ผลลัพธ์แสดงให้เห็นว่าอินสแตนซ์แรกของ $HOME ได้รับการตีความโดย PowerShell เพื่อให้ค่าของตัวแปรถูกส่งไปที่ cmd ตัวอย่างที่สองของ $HOME เกิดขึ้นหลังจากโทเค็นการแยกวิเคราะห์แบบหยุด ดังนั้นจึงถูกส่งผ่านเป็นสตริงตามตัวอักษร
C:\Users\username $HOME
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโทเค็นการหยุดการแยกวิเคราะห์ โปรดดูที่ about_Parsing
ตัวหนอน (~)
อักขระตัวหนอน (~) มีความหมายพิเศษใน PowerShell เมื่อใช้กับคำสั่ง PowerShell ที่จุดเริ่มต้นของเส้นทาง PowerShell จะขยายอักขระตัวหนอนไปยังโฮมไดเร็กทอรีของผู้ใช้ หากคุณใช้อักขระตัวหนอนที่อื่นในเส้นทาง จะถือเป็นอักขระตามตัวอักษร
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโทเค็นการหยุดการแยกวิเคราะห์ โปรดดูที่ about_Parsing
ดูเพิ่มเติม
- about_Quoting_กฎ