ในวิทยาการคอมพิวเตอร์ (และการคำนวณแบบไม่เป็นทางการ) ตัวแปรคือตำแหน่งในหน่วยความจำที่เก็บข้อมูลตามอำเภอใจเพื่อใช้ในภายหลัง กล่าวคือเป็นที่เก็บชั่วคราวเพื่อให้คุณใส่ข้อมูลและดึงข้อมูลออก ใน Bash shell ข้อมูลนั้นสามารถเป็นคำได้ (a string , ในภาษาคอมพิวเตอร์) หรือตัวเลข (จำนวนเต็ม )
คุณอาจไม่เคย (รู้เท่าทัน) ใช้ตัวแปรบนคอมพิวเตอร์ของคุณมาก่อน แต่คุณอาจเคยใช้ตัวแปรในด้านอื่นในชีวิตของคุณ เมื่อคุณพูดเช่น "ให้ฉันอย่างนั้น" หรือ "ดูนี่สิ" คุณกำลังใช้ตัวแปรทางไวยากรณ์ (คุณคิดว่ามันเป็น สรรพนาม ). ความหมายของ "สิ่งนี้" และ "สิ่งนั้น" ขึ้นอยู่กับสิ่งที่คุณกำลังนึกภาพอยู่ในใจ หรืออะไรก็ตามที่คุณชี้ไปเพื่อเป็นตัวบ่งชี้ให้ผู้ชมรู้ว่าคุณกำลังหมายถึงอะไร เมื่อคุณทำคณิตศาสตร์ คุณใช้ตัวแปรเพื่อแทนค่าที่ไม่รู้จัก แม้ว่าคุณจะไม่ได้เรียกมันว่าตัวแปรก็ตาม
บทความนี้กล่าวถึงตัวแปรใน PowerShell ซึ่งทำงานบน Windows, Linux หรือ Mac ผู้ใช้โอเพ่นซอร์ส Bash shell ควรอ้างอิงบทความของฉันเกี่ยวกับตัวแปรใน Bash shell แทน (แม้ว่าคุณจะสามารถเรียกใช้ PowerShell บน Linux และเป็นโอเพ่นซอร์ส ดังนั้นคุณยังคงติดตามบทความนี้ได้)
หมายเหตุ: ตัวอย่างในบทความนี้มาจากเซสชัน PowerShell ที่ทำงานบนระบบปฏิบัติการโอเพ่นซอร์ส Linux ดังนั้นหากคุณใช้ Windows หรือ Mac เส้นทางของไฟล์จะแตกต่างกัน อย่างไรก็ตาม Windows จะแปลง / ถึง \ โดยอัตโนมัติ และตัวอย่างทั้งหมดใช้ได้กับทุกแพลตฟอร์ม โดยคุณจะต้องแทนที่ความแตกต่างที่เห็นได้ชัด (เช่น ไม่น่าเป็นไปได้ทางสถิติที่ชื่อผู้ใช้ของคุณคือ seth )
ตัวแปรมีไว้เพื่ออะไร
คุณต้องการตัวแปรใน PowerShell หรือไม่นั้นขึ้นอยู่กับสิ่งที่คุณทำในเทอร์มินัล สำหรับผู้ใช้บางคน ตัวแปรเป็นเครื่องมือสำคัญในการจัดการข้อมูล ในขณะที่สำหรับบางคน ตัวแปรเป็นเพียงสิ่งอำนวยความสะดวกเล็กน้อยและชั่วคราว หรือสำหรับบางคน ตัวแปรก็อาจไม่มีอยู่เช่นกัน
ในที่สุด ตัวแปรเป็นเครื่องมือ คุณสามารถใช้ได้เมื่อคุณพบว่ามีการใช้งาน หรือปล่อยให้พวกเขาอยู่คนเดียวโดยสบายใจที่รู้ว่าระบบปฏิบัติการของคุณจัดการ อย่างไรก็ตาม ความรู้คือพลัง และการทำความเข้าใจว่าตัวแปรทำงานอย่างไรใน Bash สามารถนำคุณไปสู่การแก้ปัญหาเชิงสร้างสรรค์ที่ไม่คาดคิดได้ทุกประเภท
ตั้งค่าตัวแปร
คุณไม่จำเป็นต้องมีสิทธิ์พิเศษในการสร้างตัวแปร พวกมันสร้างได้ฟรี ใช้งานได้ฟรี และไม่เป็นอันตรายโดยทั่วไป ใน PowerShell คุณสร้างตัวแปรโดยกำหนดชื่อตัวแปรแล้วตั้งค่าด้วย Set-Variable สั่งการ. ตัวอย่างด้านล่างสร้างตัวแปรใหม่ชื่อ FOO และตั้งค่าเป็นสตริง $HOME/Documents :
PS> Set-Variable -Name FOO -Value "$HOME/Documents"
ความสำเร็จนั้นเงียบงันอย่างน่าขนลุก ดังนั้นคุณอาจไม่มั่นใจว่าตัวแปรของคุณถูกกำหนดไว้แล้ว คุณสามารถดูผลลัพธ์ด้วยตัวคุณเองด้วย Get-Variable (gv สั้นๆ) คำสั่ง เพื่อให้แน่ใจว่าตัวแปรถูกอ่านตรงตามที่คุณกำหนด คุณสามารถใส่เครื่องหมายคำพูดได้ การทำเช่นนี้จะคงอักขระพิเศษที่อาจปรากฏในตัวแปรไว้ ในตัวอย่างนี้ใช้ไม่ได้ แต่ก็ยังเป็นนิสัยที่ดีในการสร้าง:
PS> Get-Variable "FOO" -valueOnly
/home/seth/Documents
สังเกตว่าเนื้อหาของ FOO ไม่ใช่สิ่งที่คุณตั้งไว้ สตริงตัวอักษรที่คุณตั้งค่าสำหรับตัวแปรคือ $HOME/Documents แต่ตอนนี้มันแสดงเป็น /home/seth/Documents . สิ่งนี้เกิดขึ้นเพราะคุณสามารถซ้อนตัวแปรได้ $HOME ตัวแปรชี้ไปที่โฮมไดเร็กทอรีของผู้ใช้ปัจจุบัน ไม่ว่าจะเป็นใน C:\Users บน Windows, /home บน Linux หรือ /ผู้ใช้ บน Mac ตั้งแต่ $HOME ถูกฝังใน FOO ตัวแปรนั้นได้รับการ ขยาย เมื่อนึกขึ้นได้ การใช้ตัวแปรเริ่มต้นในลักษณะนี้จะช่วยให้คุณเขียนสคริปต์แบบพกพาที่ทำงานข้ามแพลตฟอร์มได้
ตัวแปรมักจะหมายถึงการถ่ายทอดข้อมูลจากระบบหนึ่งไปยังอีกระบบหนึ่ง ในตัวอย่างง่ายๆ นี้ ตัวแปรของคุณไม่ได้มีประโยชน์มากนัก แต่ก็ยังสามารถสื่อสารข้อมูลได้ ตัวอย่างเช่น เนื่องจากเนื้อหาของ FOO ตัวแปรเป็นเส้นทางของไฟล์ คุณสามารถใช้ FOO เป็นทางลัดไปยังไดเร็กทอรีอ้างอิงค่าของมัน
เพื่ออ้างอิงตัวแปร FOO ของ เนื้อหา และไม่ใช่ตัวตัวแปร ให้ใส่เครื่องหมายดอลลาร์ ($ .) ข้างหน้าตัวแปร ):
PS> pwd
/home/seth
PS> cd "$FOO"
PS> pwd
/home/seth/Documents
ล้างตัวแปร
คุณสามารถลบตัวแปรด้วย Remove-Variable คำสั่ง:
PS> Remove-Variable -Name "FOO"
PS> gv "FOO"
gv : Cannot find a variable with the name 'FOO'.
[...]
ในทางปฏิบัติ ไม่จำเป็นต้องลบตัวแปรออก ตัวแปรค่อนข้าง "ถูก" ดังนั้นคุณสามารถสร้างและลืมมันเมื่อคุณไม่ต้องการมันอีกต่อไป อย่างไรก็ตาม อาจมีบางครั้งที่คุณต้องการให้แน่ใจว่าตัวแปรว่างเปล่าเพื่อหลีกเลี่ยงการส่งข้อมูลที่ไม่ต้องการไปยังกระบวนการอื่นที่อาจอ่านตัวแปรนั้น
สร้างตัวแปรใหม่ที่มีการป้องกันการชนกัน
บางครั้ง คุณอาจมีเหตุผลที่เชื่อได้ว่าตัวแปรถูกตั้งค่าโดยคุณหรือกระบวนการอื่นๆ หากคุณไม่ต้องการแทนที่ คุณสามารถใช้ ตัวแปรใหม่ ซึ่งได้รับการออกแบบมาให้ล้มเหลวหากมีตัวแปรที่มีชื่อเดียวกันอยู่แล้ว หรือคุณสามารถใช้คำสั่งแบบมีเงื่อนไขเพื่อตรวจสอบตัวแปรก่อนก็ได้:
PS> New-Variable -Name FOO -Value "example"
New-Variable : A variable with name 'FOO' already exists.
หมายเหตุ: ในตัวอย่างเหล่านี้ สมมติว่า FOO ถูกตั้งค่าเป็น /home/seth/Documents .
อีกวิธีหนึ่ง คุณสามารถสร้าง ถ้า . อย่างง่าย คำสั่งเพื่อตรวจสอบตัวแปรที่มีอยู่:
PS> if ( $FOO )
>> { gv FOO } else
>> { Set-Variable -Name "FOO" -Value "quux" }
เพิ่มไปยังตัวแปร
แทนที่จะเขียนทับตัวแปร คุณสามารถเพิ่มลงในตัวแปรที่มีอยู่ได้ ใน PowerShell ตัวแปรมีหลายประเภท ได้แก่ สตริง จำนวนเต็ม และอาร์เรย์ เมื่อเลือกสร้างตัวแปรที่มีค่ามากกว่าหนึ่งค่า คุณต้องตัดสินใจว่าคุณต้องการสตริงที่คั่นด้วยอักขระหรืออาร์เรย์ คุณอาจไม่สนใจไม่ทางใดก็ทางหนึ่ง แต่แอปพลิเคชันที่ได้รับข้อมูลของตัวแปรอาจคาดหวังอย่างใดอย่างหนึ่ง ดังนั้นให้เลือกตามเป้าหมายของคุณ
ในการผนวกข้อมูลเข้ากับตัวแปรสตริง ให้ใช้ += ไวยากรณ์:
PS> gv FOO
foo
PS> $FOO += ",bar"
PS> gv FOO
foo,bar
PS> $FOO.getType().Name
String
อาร์เรย์เป็นตัวแปรชนิดพิเศษใน PowerShell และต้องการอ็อบเจ็กต์ ArrayList บทความนี้ไม่อยู่ในขอบเขต เนื่องจากต้องเจาะลึกเข้าไปใน .NET internals ของ PowerShell
ก้าวสู่โลกกว้างด้วยตัวแปรสภาพแวดล้อม
จนถึงตอนนี้ ตัวแปรที่สร้างในบทความนี้เป็น local หมายความว่าจะใช้กับเซสชัน PowerShell ที่คุณสร้างขึ้นเท่านั้น ในการสร้างตัวแปรที่สามารถเข้าถึงได้จากกระบวนการอื่น คุณสามารถสร้างตัวแปรสภาพแวดล้อม ซึ่งจะกล่าวถึงในบทความต่อๆ ไป