ทำไมเมื่อฉันพยายามเขียนฟังก์ชั่นในหนึ่งบรรทัดเป็น.bashrcไฟล์
list(){ ls -a }
ฉันได้รับข้อผิดพลาด?
bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file
แต่เมื่อฉันเขียนมันในหลายบรรทัดก็โอเค?
list(){
ls -a
}
ทำไมเมื่อฉันพยายามเขียนฟังก์ชั่นในหนึ่งบรรทัดเป็น.bashrcไฟล์
list(){ ls -a }
ฉันได้รับข้อผิดพลาด?
bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file
แต่เมื่อฉันเขียนมันในหลายบรรทัดก็โอเค?
list(){
ls -a
}
คำตอบ:
ฟังก์ชั่นในbashชื่อคำสั่งผสมเป็นหลัก (หรือบล็อกรหัส) จากman bash:
Compound Commands
A compound command is one of the following:
...
{ list; }
list is simply executed in the current shell environment. list
must be terminated with a newline or semicolon. This is known
as a group command.
...
Shell Function Definitions
A shell function is an object that is called like a simple command and
executes a compound command with a new set of positional parameters.
... [C]ommand is usually a list of commands between { and }, but
may be any command listed under Compound Commands above.
ไม่มีเหตุผลที่ให้ไว้มันเป็นเพียงไวยากรณ์
เนื่องจากรายการในฟังก์ชั่นหนึ่งบรรทัดที่กำหนดไม่ได้ถูกยกเลิกด้วยการขึ้นบรรทัดใหม่หรือ a ;, bashบ่น
มีความ;จำเป็นในตอนท้ายของฟังก์ชั่น:
list(){ ls -a ; }
ควรทำงาน.
ไวยากรณ์ของนิยามฟังก์ชันสำหรับ bash ถูกระบุเป็น
name () { list ; }
โปรดทราบว่ามันมีที่ไม่ได้เป็นส่วนหนึ่งของ;list
สิ่งที่;จำเป็นในสถานที่นี้คือความผิดปกติทางไวยากรณ์ มันไม่ได้เป็นbashเฉพาะมันเป็นเหมือนกันสำหรับkshแต่มันไม่จำเป็นต้องใช้ใน;zsh
จุดสิ้นสุดของคำสั่งเดียว (";") มีความหมายโดยขึ้นบรรทัดใหม่ ในเวอร์ชันออนไลน์}ถูกวิเคราะห์คำเป็นอาร์กิวเมนต์สำหรับls -aคำสั่งที่ไม่ได้ระบุ ซึ่งคุณสามารถดูว่าคุณทำ:
$ foo(){ echo "a" }
}
$ foo
a }
มาดูกันว่าคำสั่งภายในการประกาศฟังก์ชั่นกลืนวงเล็บปีกกาต่อท้ายได้อย่างไร?