ฟังก์ชั่นรั้งปีกกาจะทำงานภายในกระบวนการเรียกเปลือกเว้นแต่พวกเขาต้องการ subshell ของตัวเองซึ่งก็คือ:
- เมื่อคุณเรียกใช้ในพื้นหลังด้วย
&
- เมื่อคุณเรียกใช้เป็นลิงก์ในไปป์ไลน์
การเปลี่ยนเส้นทางหรือ env พิเศษ ตัวแปรจะไม่บังคับให้ subshell ใหม่:
hw(){
echo hello world from $BASHPID
echo var=$var
}
var=42 hw >&2
echo $BASHPID #unexports var=42 and restores stdout here
หากคุณกำหนดฟังก์ชันด้วยวงเล็บแทนที่จะเป็น curlies:
hw()(
echo hello world from $BASHPID
)
hw
echo $BASHPID
มันจะทำงานในกระบวนการใหม่เสมอ
การทดแทนคำสั่ง$()
สร้างกระบวนการใน bash เสมอ (แต่ไม่ใช่ใน ksh หากคุณเรียกใช้ builtins ภายใน)