ทำไมเมื่อฉันพยายามเขียนฟังก์ชั่นในหนึ่งบรรทัดเป็น.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 }
มาดูกันว่าคำสั่งภายในการประกาศฟังก์ชั่นกลืนวงเล็บปีกกาต่อท้ายได้อย่างไร?