ฉันเรียนรู้สคริปต์ทุบตีและพบสิ่งนี้ใน / usr / share / bash-completion ของฉันบรรทัด 305:
local cword words=()
มันทำอะไร? แบบฝึกหัดออนไลน์ทั้งหมดอยู่ในรูปแบบ
local var=value
ฉันเรียนรู้สคริปต์ทุบตีและพบสิ่งนี้ใน / usr / share / bash-completion ของฉันบรรทัด 305:
local cword words=()
มันทำอะไร? แบบฝึกหัดออนไลน์ทั้งหมดอยู่ในรูปแบบ
local var=value
คำตอบ:
แม้ว่าฉันจะชอบคำตอบที่ได้รับจากจอร์แดนฉันคิดว่ามันสำคัญพอ ๆ กันที่จะแสดงให้Linux
ผู้ใช้ที่มีประสบการณ์น้อยลงรู้วิธีรับมือกับคำถามเหล่านี้ด้วยตนเอง
วิธีที่แนะนำนั้นเร็วกว่าและหลากหลายกว่าการหาคำตอบที่หน้าสุ่มปรากฏขึ้นที่หน้าผลการค้นหาของ Google
ประการแรกคำสั่งทั้งหมดที่สามารถทำงานในBash
โดยไม่ต้องพิมพ์เส้นทางที่ชัดเจนให้กับมันเช่น./command
สามารถแบ่งออกเป็นสองประเภท: และBash shell builtins
มาติดตั้งกับและเป็นส่วนหนึ่งของมันในขณะที่ไม่ได้เป็นส่วนหนึ่งของ สิ่งนี้มีความสำคัญเนื่องจากมีการบันทึกไว้ด้านในและสามารถเรียกใช้เอกสารด้วยคำสั่งในขณะที่มักจะทำเป็นเอกสารด้วยตนเองหรือใช้ธงราชา ในการตรวจสอบว่าคำสั่งเป็นหรือ:external commands
Bash shell builtins
Bash
external commands
Bash
Bash shell builtins
man bash
help
external commands
manpages
-h, --help
Bash shell builtin
external command
$ type local
local is a shell builtin
มันจะแสดงhow command would be interpreted if used as a command name
(จากhelp type
) ที่นี่เราจะเห็นได้ว่าเป็นlocal
shell builtin
ลองดูตัวอย่างอื่น:
$ type vim
vim is /usr/bin/vim
ที่นี่เราจะเห็นได้ว่าvim
ไม่ได้เป็นแต่คำสั่งภายนอกอยู่ในshell builtin
/usr/bin/vim
อย่างไรก็ตามบางครั้งคำสั่งเดียวกันสามารถติดตั้งได้ทั้งในexternal command
และและshell builtin
ในเวลาเดียวกัน เพิ่ม-a
ในtype
รายการความเป็นไปได้ทั้งหมดเช่น:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
ที่นี่เราจะเห็นได้ว่าecho
เป็นทั้งและshell builtin
external command
อย่างไรก็ตามหากคุณเพียงแค่พิมพ์echo
และกดReturna shell builtin
ก็จะถูกเรียกเพราะจะปรากฏขึ้นเป็นครั้งแรกในรายการนี้ โปรดทราบว่าเวอร์ชันเหล่านี้ทั้งหมดecho
ไม่จำเป็นต้องเหมือนกัน ตัวอย่างเช่นในระบบของฉัน/usr/bin/echo
จะ--help
ตั้งค่าสถานะในขณะที่builtin
ไม่
ตกลงตอนนี้เมื่อเรารู้ว่าlocal
มันเป็นกระสุนในตัวเรามาดูกันว่ามันทำงานอย่างไร:
$ help local
local: local [option] name[=value] ...
Define local variables.
Create a local variable called NAME, and give it VALUE. OPTION can
be any option accepted by `declare'.
Local variables can only be used within a function; they are visible
only to the function where they are defined and its children.
Exit Status:
Returns success unless an invalid option is supplied, an error occurs,
or the shell is not executing a function.
หมายเหตุบรรทัดแรก: name[=value]
. ทุกอย่างระหว่าง[
และ]
เป็นตัวเลือก เป็นการประชุมทั่วไปที่ใช้ในหลาย ๆmanpages
รูปแบบของเอกสารใน*nix
โลก ที่ถูกกล่าวว่าคำสั่งที่คุณถามในคำถามของคุณเป็นกฎหมายอย่างสมบูรณ์ ในทางกลับกัน...
ตัวละครหมายความว่าอาร์กิวเมนต์ก่อนหน้านี้สามารถทำซ้ำได้ คุณสามารถอ่านเกี่ยวกับอนุสัญญานี้ได้ในman man
:
The following conventions apply to the SYNOPSIS section and can be used
as a guide in other sections.
bold text type exactly as shown.
italic text replace with appropriate argument.
[-abc] any or all arguments within [ ] are optional.
-a|-b options delimited by | cannot be used together.
argument ... argument is repeatable.
[expression] ... entire expression within [ ] is repeatable.
ดังนั้นในตอนท้ายของวันฉันหวังว่าตอนนี้คุณจะมีเวลามากขึ้นในการทำความเข้าใจกับคำสั่งต่าง ๆ ในการLinux
ทำงาน
local
หรือไม่?
man bash
ได้ เมื่ออยู่ในนั้นพิมพ์/Arrays$
เพื่อข้ามไปยังส่วนในอาร์เรย์ (การตาม$
หลังArrays
คือเพื่อป้องกันการขี่จักรยานผ่านการอ้างอิงข้อความในส่วน) จากนั้นคุณสามารถพิมพ์f
เพื่อไปข้างหน้าหน้าหรือb
ย้อนกลับ พิมพ์q
เพื่อออกจากหน้าคนเมื่อเสร็จแล้ว
help
โดยไม่มี args จะแสดงรายการ bash builtins ทั้งหมดหากคุณอยากรู้เพิ่มเติม
local
คำหลักสามารถใช้หลายตัวแปร การจัดเตรียมตัวแปรที่มีค่าเป็นทางเลือก ตัวอย่างของคุณประกาศสองตัวแปรและcword
ตัวแปรที่ได้รับมอบหมายอาร์เรย์ที่ว่างเปล่าwords
words
local
เพียงประกาศตัวแปรที่จะมีขอบเขตเฉพาะในฟังก์ชั่นที่กำหนดในปัจจุบันเพื่อให้สภาพแวดล้อมการดำเนินการหลักไม่สามารถ "เห็น" ค่า คุณไม่สามารถใช้local
นอกฟังก์ชั่น ตัวอย่าง
func() {
nonlocal="Non local variable"
local onlyhere="Local variable"
}
func
echo $nonlocal
echo $onlyhere
เอาท์พุท: ไม่ใช่ตัวแปรท้องถิ่น
ดังนั้นจึง$onlyhere
ไม่สามารถมองเห็นได้นอกขอบเขตของฟังก์ชัน
var=()
แต่ฉันคิดว่ามันเป็นเรื่องเล็กน้อยที่จะเข้าใจโดยไม่รู้ชื่อของสิ่งที่คุณกำลังมองหา . ;)