เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | เนื้อหา | ถัดไป>

การจัดการพารามิเตอร์ตำแหน่ง พร้อม

บางครั้งก็มีประโยชน์ในการจัดการพารามิเตอร์ตำแหน่งทั้งหมดเป็นกลุ่ม ตัวอย่างเช่น เราอาจต้องการเขียน "wrapper" รอบโปรแกรมอื่น ซึ่งหมายความว่าเราสร้างสคริปต์หรือฟังก์ชันเชลล์ที่ทำให้การเรียกใช้โปรแกรมอื่นง่ายขึ้น ในกรณีนี้ wrapper จะจัดเตรียมรายการตัวเลือกบรรทัดคำสั่ง arcane แล้วส่งรายการอาร์กิวเมนต์ไปยังโปรแกรมระดับล่าง

เชลล์จัดเตรียมพารามิเตอร์พิเศษสองตัวสำหรับจุดประสงค์นี้ ทั้งคู่ขยายไปยังรายการพารามิเตอร์ตำแหน่งทั้งหมด แต่แตกต่างกันในลักษณะที่ค่อนข้างละเอียดอ่อน พวกเขาคือ:


ตารางที่ 32-1: พารามิเตอร์พิเศษ * และ @


คำอธิบายพารามิเตอร์

คำอธิบายพารามิเตอร์

$* ขยายเข้าไปในรายการของพารามิเตอร์ตำแหน่ง โดยเริ่มต้นด้วย 1 เมื่อล้อมรอบด้วยเครื่องหมายคำพูดคู่ มันจะขยายเป็นสตริงที่มีเครื่องหมายอัญประกาศคู่ซึ่งมีพารามิเตอร์ตำแหน่งทั้งหมด โดยแต่ละตัวคั่นด้วยอักขระตัวแรกของตัวแปรเชลล์ IFS (โดยค่าเริ่มต้น ช่องว่าง อักขระ).


ภาพ

$@ ขยายเข้าไปในรายการพารามิเตอร์ตำแหน่ง โดยเริ่มต้นด้วย 1 เมื่อล้อมรอบด้วยเครื่องหมายคำพูดคู่ จะขยายแต่ละพารามิเตอร์ตำแหน่งเป็นคำที่แยกจากกันซึ่งล้อมรอบด้วยเครื่องหมายคำพูดคู่


ภาพ


นี่คือสคริปต์ที่แสดงพารามิเตอร์พิเศษเหล่านี้ในการดำเนินการ:

การจัดการพารามิเตอร์ตำแหน่งทั้งหมด


#! / bin / ทุบตี

# posit-params3: สคริปต์แสดง $* และ $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params () {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "word" "คำที่มีช่องว่าง"

#! / bin / ทุบตี

# posit-params3: สคริปต์แสดง $* และ $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params () {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "word" "คำที่มีช่องว่าง"


ในโปรแกรมที่ค่อนข้างซับซ้อนนี้ เราสร้างอาร์กิวเมนต์สองอาร์กิวเมนต์: "word" และ "words with spaces" และส่งผ่านไปยัง pass_params การทำงาน. ในทางกลับกัน ฟังก์ชันนั้นก็จะส่งต่อไปยัง print_params ฟังก์ชัน โดยใช้แต่ละวิธีจากสี่วิธีที่มีกับพารามิเตอร์พิเศษ $* และ $@. เมื่อดำเนินการ สคริปต์จะเปิดเผยความแตกต่าง:


ภาพ

[me@linuxbox ~]$ ตำแหน่ง-param3


-


$1

=

word

$2

=

คำ

$3

=

กับ

$4

=

ช่องว่าง

"$*" :


$1

=

คำที่มีช่องว่าง

$2

=

$3

=

$4

=

-


$1

=

word

$2

=

คำ

$3

=

กับ

$4

=

ช่องว่าง

"$@" :

$1 = คำ


$2 = คำที่มีช่องว่าง

$ 3 =

$ 4 =

$2 = คำที่มีช่องว่าง

$ 3 =

$ 4 =


ด้วยข้อโต้แย้งของเราทั้ง $* และ $@ สร้างผลลัพธ์สี่คำ:

คำที่มีช่องว่าง

"$*" ให้ผลลัพธ์เพียงคำเดียว:

"คำที่มีช่องว่าง"

"$@" ให้ผลลัพธ์สองคำ:

"คำ" "คำที่มีช่องว่าง"

ซึ่งตรงกับความตั้งใจจริงของเรา บทเรียนจากสิ่งนี้คือ แม้ว่าเชลล์จะมีสี่วิธีในการรับรายการพารามิเตอร์ตำแหน่ง "$@" มีประโยชน์มากที่สุดสำหรับสถานการณ์ส่วนใหญ่ เนื่องจากจะรักษาความสมบูรณ์ของพารามิเตอร์ตำแหน่งแต่ละตัว


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: