คู่มืออย่างรวดเร็วสำหรับการสร้างและเรียกใช้ฟังก์ชันใน Bash
ฟังก์ชันคือบล็อกของโค้ดที่สามารถนำกลับมาใช้ใหม่ได้ เพื่อดำเนินการบางอย่าง ด้วยฟังก์ชัน เราจะได้ความเป็นโมดูลาร์ที่ดีขึ้น และสามารถนำโค้ดกลับมาใช้ใหม่ได้ในระดับที่สูง
Bash มีฟังก์ชันในตัว (built-in functions) เช่น echo และ read แต่เรายังสามารถสร้างฟังก์ชันของตัวเองได้อีกด้วย
การสร้างฟังก์ชันใน Bash
มีสองวิธีในการสร้างฟังก์ชันใน Bash:
วิธีแรก คือใช้ชื่อฟังก์ชันโดยตรง เช่น:
functionName(){
// ขอบเขตของฟังก์ชัน
}
รูปแบบกระชับ:
functionName(){ echo "hello"; }
วิธีที่สอง คือประกาศฟังก์ชันโดยใช้คีย์เวิร์ด function:
function functionName {
// ขอบเขตของฟังก์ชัน
}
รูปแบบกระชับ:
function functionName { echo "hello"; }
สังเกตว่าเมื่อใช้คีย์เวิร์ด function เราไม่จำเป็นต้องมี () หลังชื่อฟังก์ชัน
จุดสำคัญเกี่ยวกับฟังก์ชัน Bash:
- โค้ดระหว่างวงเล็บปีกกา
{}คือเนื้อหาและขอบเขตของฟังก์ชัน - เมื่อเรียกใช้ฟังก์ชัน เราเพียงใช้ชื่อฟังก์ชันจากที่ใดก็ได้ในสคริปต์ Bash
- ฟังก์ชันต้องถูกกำหนดก่อนที่จะสามารถใช้งานได้
- เมื่อใช้รูปแบบกระชับ คำสั่งสุดท้ายต้องมีเครื่องหมายอัฒภาค
;
ตัวอย่าง:
โค้ดต่อไปนี้สร้างฟังก์ชันที่พิมพ์ "Hello World" ออกมาที่คอนโซล ชื่อฟังก์ชันคือ printHello:
#!/bin/bash
printHello(){
echo "Hello World!"
}
การเรียกใช้ฟังก์ชันใน Bash
เราเรียกฟังก์ชันข้างต้นอย่างไร? เพียงแค่เขียนชื่อฟังก์ชันในสคริปต์ Bash แล้วมันจะถูกเรียกใช้งาน
ตัวอย่าง:
#!/bin/bash
printHello(){
echo "Hello World!"
}
# เรียกฟังก์ชัน printHello จากที่ใดก็ได้ในสคริปต์โดยเขียนชื่อมัน
printHello
ผลลัพธ์:
Hello World
การส่งอาร์กิวเมนต์
ฟังก์ชัน printHello() ข้างต้นไม่มีพารามิเตอร์ ทุกครั้งที่เราเรียกใช้ จะได้ผลลัพธ์ "Hello World" แต่ถ้าเราอยากสร้างฟังก์ชันที่เป็นทั่วไปมากขึ้น? เช่น เราส่งอาร์กิวเมนต์ให้ฟังก์ชันและมันพิมพ์สิ่งที่เราส่งไป
มีสองวิธีในการทำ
แรก เราสามารถปรับฟังก์ชัน printHello() ให้พิมพ์อาร์กิวเมนต์ที่ส่งมา:
#!/bin/bash
printAny(){
echo "Hello " $1
}
printAny World
printAny DevQa
printAny I love coding!
ผลลัพธ์:
Hello World
Hello DevQA
Hello I
สังเกตว่า คำสั่งพิมพ์ครั้งที่สาม printAny I love coding! แสดงผลแค่ "Hello I" เท่านั้น
เพราะฟังก์ชันของเราออกแบบมาเพื่อรับพารามิเตอร์เพียง 1 ตัวคือ $1 คำว่า "I love coding!" จริงๆ แล้วเป็น 3 พารามิเตอร์
ถ้าอยากพิมพ์ทั้งหมด ต้องใช้เครื่องหมายคำพูดครอบข้อความ:
#!/bin/bash
printAny(){
echo "Hello " $1
}
printAny "I love coding!"
ผลลัพธ์:
Hello I love coding
ตัวอย่างเพิ่มเติม เราสามารถส่งตัวเลขได้ด้วย:
#!/bin/bash
add() {
result=$(($1 + $2))
echo "Result is: $result"
}
add 1 2
ผลลัพธ์:
Result is: 3
การส่งค่ากลับ
ฟังก์ชัน Bash ยังสามารถส่งค่ากลับได้
ตัวอย่าง:
#!/bin/bash
add() {
result=$(($1 + $2))
}
add 1 2
echo "The sum is: "$result
ผลลัพธ์:
The sum is: 3
อีกวิธีหนึ่งในการส่งค่ากลับจากฟังก์ชัน คือกำหนดผลลัพธ์ให้กับตัวแปร ซึ่งสามารถนำไปใช้ได้เมื่อต้องการ:
#!/bin/bash
add () {
local result=$(($1 + $2))
echo "$result"
}
result="$(add 1 2)"
echo "The sum is: "$result
ผลลัพธ์:
The sum is: 3