Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญ PowerShell Variables: คู่มือสู่ Scripting ที่มีประสิทธิภาพ

ในวิทยาการคอมพิวเตอร์ (และการคำนวณทั่วไป) ตัวแปร (Variable) คือ ตำแหน่งในหน่วยความจำที่เก็บข้อมูล Arbitrary ไว้ใช้ภายหลัง กล่าวคือ ภาชนะเก็บข้อมูลชั่วคราวสำหรับนำข้อมูลเข้าและออก ใน Bash Shell ข้อมูลอาจเป็นคำ (String) หรือตัวเลข (Integer)

คุณอาจไม่เคย (รู้ตัว) ใช้ Variable บนคอมพิวเตอร์มาก่อน แต่น่าจะเคยใช้ในด้านอื่นของชีวิต เมื่อพูดว่า "ให้ฉันสิ่งนั้น" หรือ "ดูสิ่งนี้" คุณใช้ Grammatical Variables (คิดว่าคือ Pronouns) ความหมายของ "นี้" และ "นั้น" ขึ้นอยู่กับสิ่งที่จินตนาการ หรือชี้บ่งบอก Audience ให้รู้ว่าอ้างอิงอะไร ตอนทำคณิตศาสตร์ ใช้ Variables แทนค่าที่ไม่ทราบ แม้ไม่เรียกว่า Variables

บทความนี้ Variables ใน PowerShell รันบน Windows, Linux, Mac ผู้ใช้ Bash Shell เปิดแหล่งที่เปิดอ่านบทความ Variables ใน Bash Shell แทน (แม้รัน PowerShell บน Linux ได้ และเป็น Open Source จึงติดตามบทความนี้ได้)

Note: ตัวอย่างในบทความจาก PowerShell Session บน Linux Open Source หากบน Windows/Mac File Paths จะต่าง แต่ Windows Convert / เป็น \ Auto และ Examples ทั้งหมด Work Across Platforms หากแทนที่ความต่างที่ชัดเจน (เช่น สถิติ Username เป็น seth ไม่น่าจะเป็นคุณ)

Variables ใช้ทำอะไร?

ต้องการ Variables ใน PowerShell ขึ้นอยู่กับสิ่งที่ทำใน Terminal บางคน Variables เป็น Essential Means จัดการ Data บางคน Minor Temporary Conveniences บางคนก็ไม่มีเลย

ที่จริง Variables เป็น Tool ใช้เมื่อพบประโยชน์ หรือปล่อยไว้ในความสบายใจที่ OS จัดการ Knowledge is Power การเข้าใจ Variables ใน Bash นำไปสู่ Creative Problem-solving ที่ไม่คาดคิด

Set Variable

ไม่ต้อง Special Permissions สร้างฟรี ใช้ฟรี ไม่เป็นอันตราย ใน PowerShell สร้าง Variable โดย Define Name แล้ว Set Value ด้วย Command Set-Variable ตัวอย่างสร้าง FOO ค่า $HOME/Documents:

PS> Set-Variable -Name FOO -Value "$HOME/Documents"

Success แสดงไม่ออก อาจไม่มั่นใจว่า Set แล้ว ดูผลด้วย Get-Variable (gv ย่อ) ห่อ Quotes ให้อ่าน Exact ตามที่ Define Preserve Special Characters ที่อาจปรากฏ (ตัวอย่างนี้ไม่มี แต่นิสัยดีควรทำ):

PS> Get-Variable "FOO" -valueOnly
/home/seth/Documents

สังเกต เนื้อหา FOO ไม่ใช่สิ่งที่ Set ตรงๆ String Literal ที่ Set คือ $HOME/Documents แต่นี้แสดง /home/seth/Documents เพราะ Nest Variables ได้ $HOME Point ไป Current User Home Directory ไม่ว่าจะ C:\Users Windows, /home Linux, /Users Mac เนื่องจาก $HOME Embedded ใน FOO Variable นั้น Expanded ตอน Recall การใช้ Default Variables แบ่นี้ช่วยเขียน Portable Scripts ทำงาน Cross-platform

Variables มักสื่อสารข้อมูลระหว่างระบบ ตัวอย่างนี้ไม่ค่อย Useful แต่สื่อสารได้ เนื้อหา FOO เป็น File Path ใช้ FOO เป็น Shortcut ไป Directory ที่ Value อ้างอิง

Reference Variable FOO Contents ไม่ใช่ Variable เอง Prepend Dollar Sign ($):

PS> pwd
/home/seth
PS> cd "$FOO"
PS> pwd
/home/seth/Documents

Clear Variable

ลบ Variable ด้วย Command Remove-Variable:

PS> Remove-Variable -Name "FOO"
PS> gv "FOO"
gv : Cannot find a variable with the name 'FOO'.
[...]

ในทางปฏิบัติ ลบ Variable ไม่มักจำเป็น Variables "ถูก" สร้างได้ แล้วลืมเมื่อไม่ต้องการ แต่อาจต้องการ Variable ว่าง เพื่อไม่ส่งข้อมูลไม่พึงประสงค์ไป Process อื่นที่อาจอ่าน Variable นั้น

สร้าง Variable ใหม่พร้อม Collision Protection

บางครั้งคิดว่า Variable ถูก Set ไปแล้วโดยคุณหรือ Process อื่น หากไม่ต้องการ Override ใช้ New-Variable Designed ให้ Fail หาก Variable ชื่อเดียวกันมีอยู่แล้ว หรือใช้ Conditional Statement Check Variable ก่อน:

PS> New-Variable -Name FOO -Value "example"
New-Variable : A variable with name 'FOO' already exists.

Note: ใน Examples สมมติ FOO = /home/seth/Documents

ทางเลือก สร้าง if Statement เรียบง่าย Check Existing Variable:

PS> if ( $FOO ) 
>> { gv FOO } else
>> { Set-Variable -Name "FOO" -Value "quux" }

เพิ่มเข้า Variable

แทน Overwrite Variable เพิ่มเข้า Existing Variable ได้ ใน PowerShell Variables มี Diverse Types รวม String, Integer, Array ตอนเลือกสร้าง Variable ที่มี More Than One Value ตัดสินใจว่าต้องการ Character-delimited String หรือ Array อาจไม่สนใจ แต Application ที่รับ Data ของ Variable อาจ Expect ตัวใดตัวหนึ่ง เลือกตาม Target

Append Data ให้ String Variable ใช้ Syntax +=:

PS> gv FOO
foo
PS> $FOO += ",bar"
PS> gv FOO
foo,bar
PS> $FOO.getType().Name
String

Arrays เป็น Special Types Variables ใน PowerShell ต้องการ ArrayList Object นอก Scope บทความ เพราะต้อง Drill Down เข้า .NET Internals ของ PowerShell

Go Global ด้วย Environment Variables

Variables ที่สร้างในบทความเป็น Local ใช้ได้แค่ PowerShell Session ที่สร้าง เพื่อสร้าง Variables Accessible ให้ Processes อื่น สร้าง Environment Variables จะครอบคลุมในบทความหน้า