Bash - คำสั่ง Linux - คำสั่ง Unix

ชื่อ

ทุบตี - GNU Bourne-Again SHell

สรุป

bash [ตัวเลือก] [ไฟล์]

รายละเอียด

Bash เป็น interpreter คำสั่งภาษาที่เข้ากันได้กับ sh ซึ่งรันคำสั่งที่อ่านจากอินพุตมาตรฐานหรือจากไฟล์ Bash ยังรวมคุณสมบัติที่มีประโยชน์จาก Korn และ C shells ( ksh และ csh )

Bash มีจุดมุ่งหมายเพื่อให้เป็นไปตามข้อกำหนดของ IEEE POSIX Shell and Tools (IEEE Working Group 1003.2)

ตัวเลือก

นอกเหนือจากตัวเลือกเชลล์ตัวเดียวที่ได้รับการบันทึกไว้ในคำอธิบายของคำสั่ง builtin ชุด แล้ว ทุบตี ตัวเลือกต่อไปนี้เมื่อเรียกใช้:

-c สตริง

ถ้ามีตัวเลือก -c อยู่ระบบจะอ่านคำสั่งจาก สตริง ถ้ามีอาร์กิวเมนต์หลัง สตริง พวกเขาจะถูกกำหนดให้กับพารามิเตอร์ตำแหน่งโดยเริ่มต้นด้วย 0 บาท

-ผม

ถ้าตัวเลือก -i มีอยู่เปลือกจะ โต้ตอบ

-l

ทำ ทุบตี ทำราวกับถูกเรียกเป็นเปลือกเข้าสู่ระบบ (ดู INVOCATION ด้านล่าง)

-r

หากมีตัวเลือก -r อยู่เปลือกจะ ถูก จำกัด (ดู SHELL ที่ถูก จำกัด ไว้ ด้านล่าง)

-s

ถ้าตัวเลือก -s มีอยู่หรือถ้าไม่มีอาร์กิวเมนต์ยังคงอยู่หลังประมวลผลตัวเลือกคำสั่งจะอ่านจากอินพุตมาตรฐาน ตัวเลือกนี้ช่วยให้สามารถตั้งค่าพารามิเตอร์ตำแหน่งได้เมื่อพูดถึงเปลือกโต้ตอบ

-D

รายการสตริงคู่ที่ยกมาก่อนหน้าด้วย $ จะพิมพ์ลงใน ouput มาตรฐาน ต่อไปนี้เป็นสตริงที่ต้องแปลภาษาเมื่อตำแหน่งที่ตั้งปัจจุบันไม่ใช่ C หรือ POSIX นี่หมายถึงตัวเลือก -n ; จะไม่มีคำสั่งใด ๆ

[- +] O [ shopt_option ]

shopt_option เป็นหนึ่งในตัวเลือกเชลล์ที่ยอมรับโดย builtin shopt (ดู คำสั่ง SHELL BUILTIN ด้านล่าง) ถ้า shopt_option มีอยู่ -O กำหนดค่าของตัวเลือกนั้น + ยกเลิกการตั้งค่า ถ้าไม่ได้ระบุ shopt_option ชื่อและค่าของตัวเลือก shell ที่ยอมรับโดย shopt จะพิมพ์ออกมาเป็นมาตรฐาน ถ้าตัวเลือกการเรียกคือ + O ผลลัพธ์จะปรากฏขึ้นในรูปแบบที่อาจนำมาใช้ซ้ำในรูปแบบอินพุต

-

A - ส่งสัญญาณถึงจุดสิ้นสุดของตัวเลือกและปิดใช้งานการประมวลผลตัวเลือกเพิ่มเติม อาร์กิวเมนต์ใด ๆ หลังจากที่ - ถือว่าเป็นชื่อไฟล์และอาร์กิวเมนต์ อาร์กิวเมนต์ของ - เทียบเท่ากับ - .

Bash ยังตีความตัวเลือกหลายตัว ตัวเลือกเหล่านี้ต้องปรากฏบนบรรทัดคำสั่งก่อนที่จะจดจำตัวเลือกอักขระตัวเดียว

--dump-PO-สตริง

เทียบเท่ากับ -D แต่เอาท์พุทอยู่ในไฟล์ GNU gettext po (portable object) รูปแบบไฟล์

--dump สตริง

เทียบเท่ากับ -D

--ช่วยด้วย

แสดงข้อความการใช้งานบนเอาต์พุตมาตรฐานและออกจากระบบสำเร็จ

- ไฟล์ ไฟล์แรก

- ไฟล์ rcfile

ดำเนินการคำสั่งจาก ไฟล์ แทน ไฟล์ เริ่มต้นส่วนบุคคลมาตรฐาน ~ / .bashrc ถ้าเปลือกเป็นแบบโต้ตอบ (ดู INVOCATION ด้านล่าง)

--เข้าสู่ระบบ

เทียบเท่ากับ -l

--noediting

อย่าใช้ไลบรารีแบบอ่านอย่างเดียวของ GNU เพื่ออ่านบรรทัดคำสั่งเมื่อเชลล์เป็นแบบโต้ตอบ

--noprofile

อย่าอ่านไฟล์เริ่มต้นระบบ / etc / profile หรือไฟล์เริ่มต้นส่วนบุคคลใด ๆ ~ / .bash_profile , ~ / .bash_login หรือ ~ / .profile โดยค่าเริ่มต้น bash จะอ่านไฟล์เหล่านี้เมื่อเรียกใช้เป็น shell เข้าสู่ระบบ (ดู INVOCATION ด้านล่าง)

--norc

อย่าอ่านและรันไฟล์การตั้งค่าส่วนบุคคล ~ / .bashrc ถ้าเปลือกเป็นแบบโต้ตอบ ตัวเลือกนี้จะเปิดโดยค่าเริ่มต้นหากเปลือกถูกเรียกเป็น sh

--posix

เปลี่ยนลักษณะการทำงานของ bash ซึ่งการดำเนินการเริ่มต้นแตกต่างจากมาตรฐาน POSIX 1003.2 เพื่อให้ตรงกับมาตรฐาน ( posix mode )

--จำกัด

เปลือกหีบห่อถูก จำกัด (ดู SHELL หดตัว ด้านล่าง)

--rpm-ต้อง

จัดทำรายการไฟล์ที่จำเป็นสำหรับสคริปต์เชลล์เพื่อรัน นี่หมายถึง '-n' และอาจมีข้อ จำกัด เช่นเดียวกับการตรวจสอบการตรวจสอบข้อผิดพลาดในการคอมไพล์ การทดสอบ Backticks, [] และ Eval ไม่ได้รับการแยกวิเคราะห์ดังนั้นการละเว้นบางอย่างอาจไม่ได้รับการพิจารณา - verbose เทียบเท่ากับ -v

--version

แสดงข้อมูลเวอร์ชันสำหรับอินสแตนซ์ bash นี้ ในเอาต์พุตมาตรฐานและออกจากระบบสำเร็จ

อาร์กิวเมนต์

ถ้าอาร์กิวเมนต์ยังคงอยู่หลังการประมวลผลตัวเลือกและไม่มีตัวเลือก -c และตัว -s อาร์กิวเมนต์แรกถือว่าเป็นชื่อของไฟล์ที่มีคำสั่งเชลล์ ถ้า ทุบตี ถูกเรียกใช้ในรูปแบบนี้ $ 0 จะถูกตั้งค่าเป็นชื่อของไฟล์และพารามิเตอร์ตำแหน่งจะถูกตั้งค่าเป็นอาร์กิวเมนต์ที่เหลืออยู่ Bash อ่านและรันคำสั่งจากไฟล์นี้แล้วออก สถานะทางออกของ Bash คือสถานะการออกจากคำสั่งสุดท้ายที่ดำเนินการในสคริปต์ ถ้าไม่มีคำสั่งใด ๆ สถานะการออกคือ 0 จะมีการพยายามเปิดไฟล์ในไดเร็กตอรี่ปัจจุบันและหากไม่พบไฟล์จากนั้น shell จะค้นหาไดเรกทอรีใน PATH สำหรับสคริปต์

ภาวนา

เปลือกการเข้าสู่ระบบ เป็นหนึ่งที่มีอักขระตัวแรกของอาร์กิวเมนต์ศูนย์คือ - หรือหนึ่งเริ่มต้นด้วยตัวเลือก --login

ปลั๊กอิน แบบอินเทอร์แอคทีฟ จะเริ่มต้นโดยไม่มีอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกและไม่มีตัวเลือก -c ซึ่งอินพุตและเอาต์พุตมาตรฐานจะเชื่อมต่อกับเทอร์มินัล (ตามที่กำหนดโดย isatty (3)) หรือหนึ่งตัวเริ่มด้วย -i option PS1 มีการตั้งค่าและ $ - ประกอบด้วย i ถ้า bash เป็นแบบอินเทอร์แอคทีฟทำให้สคริปต์เชลล์หรือไฟล์เริ่มต้นสามารถทดสอบสถานะนี้ได้

ย่อหน้าต่อไปนี้อธิบายว่า ทุบตี รันไฟล์เริ่มต้นทำงานอย่างไร หากไฟล์ใดมีอยู่ แต่ไม่สามารถอ่านได้ ทุบตี รายงานข้อผิดพลาด Tildes จะขยายตัวในชื่อไฟล์ตามที่อธิบายไว้ด้านล่างในส่วน ขยายตัว หนอน (Tilde Expansion) ในส่วน EXPANSION

เมื่อ ทุบตี เป็น invoked เป็น shell เข้าสู่ระบบโต้ตอบหรือเป็นเปลือกไม่โต้ตอบกับตัวเลือก --login แรกอ่านและรันคำสั่งจากแฟ้ม / etc / profile ถ้าไฟล์นั้นมีอยู่ หลังจากอ่านไฟล์นั้นแล้วไฟล์ ~ / .bash_profile , ~ / .bash_login และ ~ / .profile จะ เรียงตามลำดับนั้นและอ่านและรันคำสั่งจากไฟล์แรกที่มีอยู่และสามารถอ่านได้ ตัวเลือก --noprofile อาจถูกใช้เมื่อเปลือกเริ่มถูกยับยั้งการทำงานนี้

เมื่อ shell เข้าสู่ระบบ bash จะอ่านและรันคำสั่งจากไฟล์ ~ / .bash_logout ถ้ามีอยู่

เมื่อเชลล์แบบโต้ตอบที่ไม่ใช่เชลล์ล็อกอินจะเริ่มทำงาน bash จะอ่านและรันคำสั่งจาก ~ / .bashrc ถ้าไฟล์นั้นมีอยู่ ซึ่งอาจถูกยับยั้งโดยใช้ตัวเลือก --norc ตัวเลือก ไฟล์ --rcfile จะบังคับให้ bash อ่านและรันคำสั่งจาก ไฟล์ แทน ~ / .bashrc

เมื่อเริ่ม ทุบตีแบบ ไม่โต้ตอบให้เรียกใช้สคริปต์เชลล์ตัวอย่างเช่นมองหาตัวแปร BASH_ENV ในสภาพแวดล้อมการขยายค่าหากปรากฏอยู่ที่นั่นและใช้ค่าที่ขยายเป็นชื่อไฟล์ที่อ่านและรัน . Bash จะทำหน้าที่เสมือนสั่งคำสั่งต่อไปนี้:

ถ้า [-n "$ BASH_ENV"]; แล้ว "$ BASH_ENV"; Fi

แต่ค่าของตัวแปร PATH ไม่ใช้ในการค้นหาชื่อไฟล์

ถ้า ทุบตี ถูกเรียกด้วยชื่อ sh จะพยายามเลียนแบบพฤติกรรมการเริ่มต้นของเวอร์ชันประวัติศาสตร์ของ sh ให้ใกล้เคียงที่สุดเท่าที่จะเป็นไปได้ในขณะที่สอดคล้องกับมาตรฐาน POSIX เช่นกัน เมื่อเรียกใช้เป็นเชลล์เข้าสู่ระบบแบบอินเทอร์แอ็กทีฟหรือเชลล์แบบไม่โต้ตอบซึ่งมี อ็อพชัน --login จะพยายามอ่านและรันคำสั่งจาก / etc / profile และ ~ / .profile ตามลำดับดังกล่าว ตัวเลือก --noprofile อาจถูกใช้เพื่อยับยั้งการทำงานนี้ เมื่อเรียกใช้เป็นเชลล์แบบโต้ตอบที่มีชื่อ sh ทุบตี มองหาตัวแปร ENV ขยายค่าหากมีการกำหนดและใช้ค่าที่ขยายเป็นชื่อไฟล์ที่จะอ่านและดำเนินการ เนื่องจากเปลือกเรียกเป็น sh ไม่ได้พยายามที่จะอ่านและรันคำสั่งจากไฟล์เริ่มต้นอื่น ๆ ตัวเลือก --rffile ไม่มีผลใด ๆ เปลือกที่ไม่โต้ตอบซึ่งเรียกใช้ชื่อ sh ไม่พยายามอ่านไฟล์เริ่มต้นระบบอื่น ๆ เมื่อเรียกใช้เป็น sh bash จะ เข้าสู่โหมด posix หลังจากอ่านไฟล์เริ่มต้นแล้ว

เมื่อ ทุบตี เริ่มทำงานในโหมด posix เช่นเดียวกับตัวเลือกบรรทัดคำสั่ง -posix จะเป็นไปตามมาตรฐาน POSIX สำหรับไฟล์สำหรับเริ่มต้น ในโหมดนี้หอยโต้ตอบจะขยายตัวแปร ENV และคำสั่งจะถูกอ่านและดำเนินการจากไฟล์ที่มีชื่อเป็นค่าที่ขยาย ไม่มีไฟล์เริ่มต้นอื่น ๆ ถูกอ่าน

ทุบตี พยายามที่จะกำหนดเมื่อมีการเรียกใช้โดย daemon เปลือกระยะไกลโดยปกติ rshd ถ้า bash กำหนดว่ากำลังรันโดย rshd จะอ่านและรันคำสั่งจาก ~ / .bashrc ถ้าไฟล์นั้นมีอยู่และสามารถอ่านได้ จะไม่ทำเช่นนี้ถ้า invoked เป็น sh อาจใช้ตัวเลือก - ออร์ค เพื่อยับยั้งการทำงานนี้และตัวเลือก - rffile อาจถูกใช้เพื่อบังคับให้อ่านไฟล์อื่นได้ แต่ rshd ไม่เรียกใช้เชลล์โดยทั่วไปกับตัวเลือกเหล่านั้นหรืออนุญาตให้ระบุได้

ถ้าเชลล์เริ่มต้นด้วยรหัสผู้ใช้ (กลุ่ม) ที่มีประสิทธิภาพไม่เท่ากับ ID ผู้ใช้จริง (กลุ่ม) และไม่ได้ระบุตัวเลือก -p ไม่ได้อ่านไฟล์เริ่มต้นระบบจะไม่สืบทอดคุณสมบัติของเชลล์จากสภาพแวดล้อม SHELLOPTS ตัวแปรถ้าปรากฏในสภาพแวดล้อมถูกละเว้นและ ID ผู้ใช้ที่มีประสิทธิภาพถูกตั้งค่าเป็นรหัสผู้ใช้จริง ถ้าตัวเลือก -p ถูกจัดเตรียมไว้ในคำร้องขอการเริ่มต้นใช้งานจะเหมือนกัน แต่จะไม่มีการตั้งค่ารหัสผู้ใช้ที่มีประสิทธิภาพ

บทนิยาม

คำจำกัดความต่อไปนี้ใช้ตลอดช่วงที่เหลือของเอกสารนี้

ว่างเปล่า

ช่องว่างหรือแท็บ

คำ

ลำดับของอักขระที่ถือเป็นหน่วยเดียวโดยเปลือก เรียกอีกอย่างว่า โทเค็น

ชื่อ

คำที่ ประกอบด้วยเฉพาะตัวอักษรตัวเลขและตัวหนังสือและเครื่องหมายขีดล่างและเริ่มต้นด้วยตัวอักษรหรือขีดล่าง เรียกอีกอย่างว่า ตัวระบุ

metacharacter

ตัวอักษรที่เมื่อ unquoted แยกคำ ข้อใดข้อหนึ่งต่อไปนี้:

| &; () <> แท็บพื้นที่

ควบคุมการดำเนินงาน

โทเค็น ที่ทำหน้าที่ควบคุม เป็นหนึ่งในสัญลักษณ์ต่อไปนี้:

|| & &&; ;; () |

คำสงวน

คำสงวน คือคำที่มีความหมายพิเศษสำหรับเปลือก คำต่อไปนี้ได้รับการยอมรับว่าเป็นสิทธิเมื่อ unquoted และคำแรกของคำสั่งง่ายๆ (ดู เชลล์ GRAMMAR ด้านล่าง) หรือคำที่สามของ กรณี หรือ สำหรับ คำสั่ง:

! กรณีทำ elif อื่น esac fi สำหรับฟังก์ชันถ้าในการเลือกแล้วจนกระทั่งในขณะที่ {} เวลา [[]]

SHELL GRAMMAR

คำสั่งง่ายๆ

คำสั่งง่ายๆ คือชุดของการกำหนดตัวแปรที่เป็นไปได้ตามด้วยคำและการเปลี่ยนเส้นทางที่ ว่างเปล่า และถูกยกเลิกโดยผู้ ควบคุม คำแรกระบุคำสั่งที่จะดำเนินการและถูกส่งผ่านเป็นอาร์กิวเมนต์เป็นศูนย์ คำที่เหลือจะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังคำสั่งที่เรียกใช้

ค่าที่ส่งกลับของ คำสั่งง่ายๆ คือสถานะทางออกหรือ 128 n ถ้าคำสั่งถูกยกเลิกโดยสัญญาณ n

ท่อ

ท่อ เป็นลำดับหนึ่งหรือหลายคำสั่งที่คั่นด้วยตัวอักษร . รูปแบบของท่อคือ:

[ เวลา [ -p ]] [! ] คำสั่ง [ | command2 ... ]

เอาท์พุทมาตรฐานของ คำสั่ง จะเชื่อมต่อผ่านทางท่อไปยังอินพุตมาตรฐานของ command2 การเชื่อมต่อนี้จะดำเนินการก่อนการเปลี่ยนเส้นทางที่ระบุโดยคำสั่ง (ดูการ เปลี่ยน ทิศทางด้านล่าง)

ถ้าคำสงวนไว้ ! นำหน้าท่อสถานะทางออกของท่อนั่นคือตรรกะไม่ออกจากสถานะของคำสั่งสุดท้าย มิฉะนั้นสถานะของท่อคือสถานะทางออกของคำสั่งสุดท้าย เปลือกรอคำสั่งทั้งหมดในท่อเพื่อยุติก่อนที่จะส่งคืนค่า

ถ้าคำสงวน เวลา นำหน้าไปป์ไลน์เวลาที่ผ่านไปตลอดจนเวลาของผู้ใช้และระบบที่บริโภคโดยการดำเนินการจะมีการรายงานเมื่อสิ้นสุดท่อ ตัวเลือก -p จะเปลี่ยนรูปแบบเอาต์พุตเป็นที่กำหนดโดย POSIX ตัวแปร TIMEFORMAT สามารถตั้งค่าเป็นสตริงรูปแบบที่ระบุว่าควรแสดงข้อมูลการจับเวลาอย่างไร ดูคำอธิบายของ TIMEFORMAT ภายใต้ ตัวแปรเชลล์ ด้านล่าง

แต่ละคำสั่งในท่อถูกดำเนินการเป็นกระบวนการแยก (เช่นใน subshell)

รายการ

รายการ คือลำดับของท่ออย่างน้อยหนึ่งรายการที่คั่นด้วยผู้ดำเนินการรายใดรายหนึ่ง , & , && หรือ || และเลือกโดยหนึ่งใน ; , & , หรือ

ของผู้ประกอบการรายชื่อเหล่านี้ && และ || มีความสำคัญเท่ากันตามด้วย ; และ & ซึ่งมีความสำคัญเท่ากัน

ลำดับของบรรทัดใหม่อย่างน้อยหนึ่งบรรทัดอาจปรากฏใน รายการ แทนเครื่องหมายอัฒภาคเพื่อกำหนดคำสั่ง

ถ้าคำสั่งถูกยกเลิกโดยโอเปอเรเตอร์ควบคุม & เปลือกจะรันคำสั่งในแบ็ กก ราวด์ใน พื้นหลัง เปลือกไม่รอคำสั่งให้เสร็จสิ้นและสถานะการส่งคืนคือ 0 คำสั่งที่คั่นด้วย a ; จะดำเนินการตามลำดับ เปลือกรอแต่ละคำสั่งเพื่อยุติการในทางกลับกัน สถานะการส่งคืนคือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการ

ตัวควบคุม && และ || แสดงและรายการและหรือรายการตามลำดับ รายการ AND มีแบบฟอร์ม

command1 && command2

command2 จะทำงานถ้าและเมื่อ command1 ส่งกลับสถานะการออกจากศูนย์

รายการหรือมีแบบฟอร์ม

command1 || Command2

command2 จะทำงานถ้าและเฉพาะในกรณีที่ command1 ส่งกลับสถานะการจบการทำงานที่ไม่ใช่ศูนย์ สถานะการส่งคืนของ AND และ OR รายการคือสถานะการออกจากคำสั่งสุดท้ายที่ดำเนินการในรายการ

คำสั่งผสม

คำสั่งผสม คือ คำสั่ง ต่อไปนี้:

( รายการ )

รายการ จะถูกดำเนินการใน subshell การกำหนดตัวแปรและคำสั่ง builtin ที่มีผลต่อสภาพแวดล้อมของเชลล์จะไม่มีผลต่อหลังจากคำสั่งเสร็จสิ้น สถานะการส่งคืนคือสถานะทางออกของ รายการ

{ list ; }

รายการ จะดำเนินการเพียงในสภาพแวดล้อมเปลือกปัจจุบัน ต้องถูกยกเลิกด้วยบรรทัดใหม่หรืออัฒภาค นี่เรียกว่า คำสั่งกลุ่ม สถานะการส่งคืนคือสถานะทางออกของ รายการ โปรดทราบว่าแตกต่างจาก metacharacters ( และ ) { และ } เป็น คำสงวน และต้องเกิดขึ้นในกรณีที่อนุญาตให้จดจำคำที่สงวนไว้ เนื่องจากไม่ก่อให้เกิดคำว่าแบ่งพวกเขาจึงต้องแยกจาก รายการ ตามช่องว่าง

(( นิพจน์ ))

นิพจน์ จะได้รับการประเมินตามกฎที่อธิบายไว้ด้านล่างภายใต้การประเมินผลแบบ อาร์เรย์ (ARITHMETIC EVALUATION ) ถ้าค่าของนิพจน์ไม่ใช่ศูนย์ผลลัพธ์ที่ได้คือ 0; มิฉะนั้นสถานะการส่งคืนคือ 1 นี่เท่ากับว่า ให้ " นิพจน์ "

[[ นิพจน์ ]]

แสดงสถานะเป็น 0 หรือ 1 ขึ้นอยู่กับการประเมินผลนิพจน์ นิพจน์ ตามเงื่อนไข นิพจน์จะประกอบด้วยพรรคที่อธิบายไว้ด้านล่างภายใต้ CONSTRUCTION EXPRESSIONS การแยกคำและการขยายพา ธ ชื่อไม่ได้ใช้กับคำระหว่าง [[ และ ]] ; การขยายตัวหนอนพารามิเตอร์และการขยายตัวแปรการขยายตัวทางคณิตศาสตร์การแทนที่คำสั่งการแทนที่กระบวนการและการลบข้อความจะดำเนินการ

เมื่อใช้ == และ ! = ตัวดำเนินการสายอักขระทางด้านขวาของโอเปอเรเตอร์จะถือว่าเป็นรูปแบบและตรงตามกฎที่อธิบายไว้ด้านล่างในการ จับคู่รูปแบบ ค่าที่ส่งกลับคือ 0 ถ้าสตริงตรงหรือไม่ตรงกับรูปแบบตามลำดับและ 1 มิฉะนั้น ส่วนใดส่วนหนึ่งของรูปแบบอาจถูกยกมาเพื่อบังคับให้จับคู่เป็นสตริง

นิพจน์อาจรวมกันโดยใช้ตัวดำเนินการต่อไปนี้ตามลำดับลำดับความสำคัญที่ลดลง:

( นิพจน์ )

ส่งกลับค่าของ นิพจน์ ซึ่งอาจใช้เพื่อแทนที่ความสำคัญตามปกติของโอเปอเรเตอร์

! การแสดงออก

จริงถ้า นิพจน์ เป็นเท็จ

expression1 && expression2

จริงถ้าทั้ง expression1 และ expression2 เป็น true

expression1 || expression2 เป็น true หาก นิพจน์ expression1 หรือ expression2 เป็น true

&& และ || ผู้ประกอบการไม่ได้ประเมิน นิพจน์ 2 ถ้าค่าของ นิพจน์ 1 มีเพียงพอที่จะกำหนดค่าที่ส่งกลับของนิพจน์เงื่อนไขทั้งหมด

สำหรับ ชื่อ [ ใน คำ ]; ทำ รายการ ; เสร็จแล้ว

รายการคำที่ต่อไปนี้มีการขยายและสร้างรายการของไอเท็ม ชื่อ ตัวแปรจะถูกตั้งค่าให้กับแต่ละองค์ประกอบของรายการนี้และ รายชื่อ จะถูกเรียกใช้ในแต่ละครั้ง ถ้า คำ ใน ถูกละไว้คำสั่ง for จะรัน รายการ หนึ่งครั้งสำหรับแต่ละพารามิเตอร์ตำแหน่งที่ตั้งค่าไว้ (ดู พารามิเตอร์ ด้านล่าง) สถานะการส่งคืนคือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการ หากการขยายรายการต่อไปนี้ ใน ผลลัพธ์ในรายการที่ว่างเปล่าจะไม่มีการเรียกใช้คำสั่งใด ๆ และสถานะการส่งคืนคือ 0

สำหรับ (( expr1 ; expr2 ; expr3 )); ทำ รายการ ; เสร็จแล้ว

อันดับแรก expr1 นิพจน์ทางคณิตศาสตร์ได้รับการประเมินตามกฎที่อธิบายไว้ด้านล่างภายใต้การประเมินค่า ARITHMETIC การแสดงออกทางคณิตศาสตร์เลขคณิต 2 จะได้รับการประเมินซ้ำ ๆ จนกว่าจะมีการประเมินเป็นศูนย์ ทุกครั้งที่ expr2 ประเมินค่าที่ไม่ใช่ศูนย์ รายการ จะถูกเรียกใช้และ expr3 นิพจน์เลขคณิตจะได้รับการประเมิน ถ้านิพจน์ใดละเว้นจะทำงานเหมือนกับว่าเป็น 1 ค่าที่ส่งกลับคือสถานะทางออกของคำสั่งสุดท้ายใน รายการ ที่ถูกดำเนินการหรือเท็จถ้านิพจน์ใด ๆ ไม่ถูกต้อง

เลือก ชื่อ [ ใน คำ ]; ทำ รายการ ; เสร็จแล้ว

รายการคำที่ต่อไปนี้มีการขยายและสร้างรายการของไอเท็ม ชุดของคำที่ขยายจะพิมพ์ตามข้อผิดพลาดมาตรฐานซึ่งมีตัวเลขอยู่ข้างหน้า หากมีการเว้นวรรคในพารามิเตอร์พารามิเตอร์ตำแหน่งจะพิมพ์ (ดู พารามิเตอร์ ด้านล่าง) ระบบเตือน PS3 จะปรากฏขึ้นและบรรทัดที่อ่านจากอินพุตมาตรฐาน ถ้าบรรทัดประกอบด้วยตัวเลขที่ตรงกับคำที่แสดงไว้หนึ่งคำนั้นค่าของ ชื่อ จะถูกตั้งค่าเป็นคำดังกล่าว ถ้าบรรทัดว่างคำและพรอมต์จะปรากฏขึ้นอีกครั้ง ถ้าอ่าน EOF คำสั่งจะเสร็จสมบูรณ์ การอ่านค่าอื่น ๆ ทำให้ ชื่อ ถูกตั้งค่าเป็นโมฆะ บรรทัดที่อ่านจะถูกบันทึกไว้ใน REPLY ตัวแปร รายการ จะถูกดำเนินการหลังจากการเลือกแต่ละครั้งจนกว่าคำสั่ง แบ่ง จะถูกดำเนินการ สถานะทางออกของการ เลือก คือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการอยู่ใน รายการ หรือศูนย์หากไม่มีคำสั่งใดถูกดำเนินการ

กรณี คำ ใน รูปแบบ [[(]] [ รูปแบบ ]

คำสั่ง case จะขยาย คำ และพยายามจับคู่กับ รูปแบบ แต่ละ รูปแบบ โดยใช้กฎการจับคู่เหมือนกันกับการขยาย เส้นทาง (ดู การขยายเส้นทาง ) เมื่อจับคู่พบ รายการที่ เกี่ยวข้องจะถูกดำเนินการ หลังจากการแข่งขันรอบแรกไม่มีการแข่งขันที่ตามมา สถานะทางออกคือศูนย์หากไม่มีรูปแบบตรงกับ มิฉะนั้นจะเป็นสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการใน รายการ

ถ้า รายการ ; แล้ว รายการ; [ รายการ elif ; แล้ว รายการ ; ] ... [ รายการ อื่น ; ] fi

ถ้า รายการ ถูกเรียกใช้ ถ้าสถานะออกเป็นศูนย์ รายการที่ ดำเนินการอยู่ มิฉะนั้น รายการ elif แต่ละตัวจะถูกดำเนินการในทางกลับกันและหากสถานะการออกเป็นศูนย์รายการที่สอดคล้องกันจะถูกดำเนินการและคำสั่งเสร็จสิ้น มิฉะนั้น รายการ อื่น จะถูกดำเนินการถ้ามี สถานะทางออกคือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการหรือศูนย์หากไม่มีเงื่อนไขที่ทดสอบจริง

ในขณะที่ รายการ ; ทำ รายการ ; เสร็จแล้ว

จนกว่า รายการ ; ทำ รายการ ; เสร็จแล้ว

ขณะที่ คำสั่งรัน รายการ ทำ อย่างต่อเนื่องตราบเท่าที่คำสั่งสุดท้ายใน รายการ ส่งกลับค่าสถานะทางออกของศูนย์ คำสั่ง จนกว่า จะเหมือนกับคำสั่ง ในขณะที่ ยกเว้นว่าการทดสอบถูกลบล้าง รายการ สิ่งที่ต้องทำ จะถูกดำเนินการตราบเท่าที่คำสั่งสุดท้ายใน รายการ ส่งกลับค่าสถานะทางออกที่ไม่ใช่ศูนย์ สถานะการออกใน ขณะที่ และ จนกว่า คำสั่งจะเป็นสถานะการออกจากคำสั่ง last list list ที่ ทำ หรือ zero ถ้าไม่มีการดำเนินการใด ๆ

ชื่อ [ function ] () { list ; }

นี้กำหนดชื่อชื่อฟังก์ชัน เนื้อหา ของฟังก์ชันคือ รายการ คำสั่งระหว่าง {และ} รายการนี้จะถูกเรียกใช้เมื่อ ชื่อ ถูกระบุเป็นชื่อของคำสั่งง่ายๆ สถานะทางออกของฟังก์ชันคือสถานะทางออกของคำสั่งสุดท้ายที่ดำเนินการในเนื้อหา (ดู FUNCTIONS ด้านล่าง)

ความคิดเห็น

ใน shell แบบไม่โต้ตอบหรือ shell แบบอินเทอร์แอ็กทีฟซึ่ง มี การเปิดใช้งานตัวเลือก interactive_comments กับ builtin shopt (ดู คำสั่ง SHELL BUILTIN ด้านล่าง) คำที่ขึ้นต้นด้วย # จะทำให้คำนั้นและอักขระที่เหลืออยู่ในบรรทัดนั้นไม่สนใจ ปลั๊กอินแบบโต้ตอบที่ไม่มีตัวเลือก interactive_comments ที่ เปิดใช้งานไม่อนุญาตให้แสดงความคิดเห็น ตัวเลือก interactive_comments จะเปิดใช้โดยค่าเริ่มต้นในเปลือกแบบอินเทอร์แอคทีฟ

quoting

Quoting ใช้เพื่อลบความหมายพิเศษของอักขระหรือคำบางคำไปยังเชลล์ Quoting สามารถใช้เพื่อปิดการใช้งานการรักษาพิเศษสำหรับอักขระพิเศษเพื่อป้องกันไม่ให้มีการจดจำคำสงวนและป้องกันการขยายตัวพารามิเตอร์

metacharacters แต่ละ ตัวที่ ระบุไว้ข้างต้นภายใต้ DEFINITIONS มีความหมายพิเศษสำหรับเชลล์และต้องถูกยกมาถ้าเป็นตัวแทนของตัวเอง

เมื่อมีการใช้สิ่งอำนวยความสะดวกการขยายประวัติคำสั่งอักขระ การขยายประวัติ จะเป็น ! ต้องถูกยกมาเพื่อป้องกันไม่ให้การขยายประวัติ

มีกลไกการเสนอราคาสามแบบ ได้แก่ อักขระ Escape , เครื่องหมายเดียวและเครื่องหมายคำพูดคู่

เครื่องหมายทับขวา ( \ ) ที่ไม่ได้ยกมา ( \ ) คือ อักขระ Escape จะเก็บค่าตามตัวอักษรของอักขระถัดไปที่ตามมายกเว้น ถ้า \ newline> คู่ปรากฏและเครื่องหมายทับขวาจะไม่ถูกยกมาเอง \ newline จะถือว่าเป็นส่วนต่อเนื่องของบรรทัด (นั่นคือจะถูกลบออกจากสตรีมอินพุทและไม่สนใจอย่างมีนัยสำคัญ)

การใส่อักขระในเครื่องหมายคำพูดแบบเดี่ยวจะเก็บค่าตามตัวอักษรของอักขระแต่ละตัวไว้ในเครื่องหมายคำพูด คำพูดเดียวอาจไม่เกิดขึ้นระหว่างคำพูดเดียวแม้ว่าจะมีเครื่องหมายทับขวา

การใส่อักขระในเครื่องหมายคำพูดคู่จะเก็บค่าอักษรของอักขระทั้งหมดไว้ในเครื่องหมายคำพูดยกเว้น $ , ` และ \ อักขระ $ และ ` เก็บความหมายพิเศษไว้ในเครื่องหมายคำพูดคู่ เครื่องหมายทับขวาจะมีความหมายพิเศษเฉพาะเมื่อมีอักขระตัวใดตัวหนึ่งต่อไปนี้: $ , ` , " , \ , หรือ การอ้างคำพูดสองครั้งอาจถูกยกมาภายในเครื่องหมายคำพูดแบบคู่โดยก่อนหน้าด้วยเครื่องหมายแบ็กสแลช

พารามิเตอร์พิเศษ * และ @ มีความหมายพิเศษเมื่ออยู่ในเครื่องหมายคำพูดแบบคู่ (ดู พารามิเตอร์ ด้านล่าง)

คำในรูปแบบ $ ' string ' จะถือว่าเป็นพิเศษ คำขยายไปยัง สตริง โดยใช้อักขระที่มีการแทนที่ด้วยเครื่องหมายทับขวาแทนตามที่กำหนดโดยมาตรฐาน ANSI C ลำดับแบ็กสแลชหนีบถ้ามีอยู่จะถูกถอดรหัสดังนี้:

\ a

การแจ้งเตือน (ระฆัง)

\ ข

Backspace

\ E

ตัวหนี

\ ฉ

ฟีดรูปแบบ

\ n

บรรทัดใหม่

\ r

กลับรถ

\ t

แท็บแนวนอน

\ วี

แท็บแนวตั้ง

\\

ทับขวา

\'

อ้างเพียงครั้งเดียว

\ nnn

อักขระแปดบิตที่มีค่าเป็นค่าฐานแปด nnn (หนึ่งถึงสามหลัก)

\ x HH

อักขระ 8 บิตที่มีค่าเป็นเลขฐานสิบหก HH (ตัวเลขฐานสิบหกหรือหกหลัก)

\ c x

อักขระควบคุม x

ผลลัพธ์ที่ขยายออกมาคือการยกมาครั้งเดียวเช่นเดียวกับเครื่องหมายดอลลาร์ที่ยังไม่ปรากฏ

สตริงที่มีการยกสองครั้งนำหน้าด้วยเครื่องหมายดอลลาร์ ( $ ) จะทำให้สตริงถูกแปลตามสถานที่ปัจจุบัน ถ้าตำแหน่งที่ตั้งปัจจุบันคือ C หรือ POSIX เครื่องหมายดอลลาร์จะถูกละเว้น ถ้าสตริงถูกแปลและแทนที่การเปลี่ยนจะถูกยกมาสองครั้ง

พารามิเตอร์

พารามิเตอร์ คือเอนทิตีที่เก็บค่า อาจเป็น ชื่อ หมายเลขหรืออักขระพิเศษใด ๆ ที่ระบุไว้ด้านล่างตาม Special Parameters สำหรับวัตถุประสงค์ของเชลล์ ตัวแปร คือพารามิเตอร์ที่แสดงด้วย ชื่อ ตัวแปรมี ค่า และศูนย์หรือมากกว่านั้น มีการกำหนดแอตทริบิวต์โดยใช้คำสั่ง builtin declare (ดู ประกาศ ด้านล่างใน คำสั่ง SHELL BUILTIN COMMANDS )

พารามิเตอร์ถูกตั้งค่าหากได้รับการกำหนดค่าแล้ว สตริงที่เป็นค่าที่ถูกต้อง เมื่อตัวแปรได้รับการตั้งค่าแล้วอาจไม่ได้ตั้งค่าเฉพาะโดยใช้คำสั่ง builtin ที่ไม่ได้ ตั้งค่าไว้ (ดูคำสั่ง SHELL BUILTIN ด้านล่าง)

ตัวแปร อาจถูกกำหนดให้โดยคำสั่งของฟอร์ม

name = [ value ]

ถ้าไม่มี ค่า ตัวแปรจะกำหนดให้สตริงว่าง ค่า ทั้งหมดได้รับการขยายตัวหนอนพารามิเตอร์และการขยายตัวแปรการแทนที่คำสั่งการขยายตัวทางคณิตศาสตร์และการลบข้อความ (ดูการ ขยาย ด้านล่าง) ถ้าตัวแปรมีชุดแอตทริบิวต์ จำนวนเต็ม ค่า นี้จะขึ้นอยู่กับการขยายตัวทางคณิตศาสตร์แม้ว่าจะไม่ได้ใช้การขยายตัว $ ((... )) (ดู การขยายตัวทางคณิตศาสตร์ ด้านล่าง) การแบ่งคำไม่ได้ดำเนินการยกเว้น "$ @" ตามที่อธิบายไว้ด้านล่างในหัวข้อ Special Parameters การขยายเส้นทางไม่ได้ทำ ข้อความมอบหมายอาจปรากฏเป็นอาร์กิวเมนต์สำหรับ ประกาศ คำสั่ง typeset , export , readonly และ local builtin

พารามิเตอร์ตำแหน่ง

พารามิเตอร์ตำแหน่ง เป็นพารามิเตอร์ที่แสดงด้วยตัวเลขหนึ่งหรือมากกว่าหนึ่งตัวยกเว้นตัวเลขเดี่ยว 0. พารามิเตอร์ตำแหน่งถูกกำหนดจากอาร์กิวเมนต์ของเชลล์เมื่อถูกเรียกใช้และอาจถูกกำหนดใหม่โดยใช้คำสั่ง builtin ชุด พารามิเตอร์ตำแหน่งอาจไม่ได้กำหนดให้กับข้อความกำหนดการมอบหมาย พารามิเตอร์ตำแหน่งจะถูกแทนที่ชั่วคราวเมื่อทำงานของเชลล์ (ดู ฟังก์ชัน ด้านล่าง)

เมื่อมีการขยายพารามิเตอร์ตำแหน่งซึ่งประกอบด้วยมากกว่าหนึ่งหลักจะต้องมีเครื่องหมายวงเล็บไว้ (ดูการ ขยายเวลา ด้านล่าง)

พารามิเตอร์พิเศษ

เปลือกถือว่าหลายพารามิเตอร์พิเศษ พารามิเตอร์เหล่านี้สามารถอ้างอิงได้เท่านั้น ไม่อนุญาตให้มอบหมายงานแก่พวกเขา

* * * *

ขยายไปยังพารามิเตอร์ตำแหน่งจากจุดเริ่มต้น เมื่อการขยายตัวเกิดขึ้นภายในเครื่องหมายคำพูดคู่จะขยายเป็นคำเดียวโดยมีค่าของพารามิเตอร์แต่ละตัวคั่นด้วยอักขระพิเศษของตัวแปรพิเศษ IFS นั่นคือ " $ * " เท่ากับ " $ 1 c $ 2 c ... " โดยที่ c เป็นตัวแรกของตัวแปร IFS หากไม่มีการตั้งค่า IFS พารามิเตอร์จะคั่นด้วยช่องว่าง ถ้า IFS เป็นโมฆะพารามิเตอร์จะเข้าร่วมโดยไม่แทรกแซงตัวคั่น

แอท

ขยายไปยังพารามิเตอร์ตำแหน่งจากจุดเริ่มต้น เมื่อการขยายตัวเกิดขึ้นภายในเครื่องหมายคำพูดคู่แต่ละพารามิเตอร์จะขยายเป็นคำที่แยกจากกัน นั่นคือ " $ @ " เทียบเท่ากับ " $ 1 " " $ 2 " ... เมื่อไม่มีพารามิเตอร์ตำแหน่ง " $ @ " และ $ @ จะขยายเป็นอะไร (กล่าวคือถูกลบออก)

#

ขยายไปยังหมายเลขของพารามิเตอร์ตำแหน่งในรูปแบบทศนิยม

?

ขยายไปสู่สถานะของท่อนำหน้าที่ทำงานล่าสุดเมื่อเร็ว ๆ นี้

-

ขยายไปยังแฟล็กตัวเลือกปัจจุบันตามที่ระบุไว้ในคำร้องโดยใช้คำสั่ง builtin builtin หรือชุดที่กำหนดโดยเชลล์เอง (เช่นตัวเลือก -i )

$

ขยายไปยังรหัสกระบวนการของเชลล์ ใน subshell () จะขยายไปยัง ID กระบวนการของเชลล์ปัจจุบันไม่ใช่ subshell

!

ขยายไปยัง ID กระบวนการของคำสั่งพื้นหลังที่ทำงานล่าสุด (แบบอะซิงโครนัส)

0

ขยายไปยังชื่อของเชลล์หรือเชลล์สคริปต์ นี่คือชุดที่เริ่มต้นเปลือก ถ้า ทุบตี ถูกเรียกด้วยไฟล์คำสั่ง $ 0 จะถูกตั้งค่าเป็นชื่อของไฟล์นั้น ถ้า ทุบตี เริ่มต้นด้วยตัวเลือก -c จากนั้น $ 0 จะถูกตั้งค่าเป็นอาร์กิวเมนต์แรกหลังจากสตริงที่จะถูกเรียกใช้ถ้ามีอยู่ มิฉะนั้นจะถูกตั้งเป็นชื่อไฟล์ที่ใช้เพื่อเรียกใช้ bash ตามที่ระบุโดยอาร์กิวเมนต์เป็นศูนย์

_

เมื่อเชลล์เริ่มต้นตั้งค่าเป็นชื่อไฟล์สัมบูรณ์ของเชลล์หรือเชลล์สคริปต์ที่ถูกเรียกใช้งานผ่านทางรายการอาร์กิวเมนต์ ต่อจากนั้นจะขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้านี้หลังจากการขยาย ตั้งค่าเป็นชื่อไฟล์ทั้งหมดของคำสั่งแต่ละคำสั่งและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น เมื่อตรวจสอบเมลพารามิเตอร์นี้จะเก็บชื่อของไฟล์เมลที่กำลังตรวจสอบอยู่

ตัวแปรเชลล์

ตัวแปรต่อไปนี้ถูกกำหนดโดยเชลล์:

ทุบตี

ขยายไปยังชื่อไฟล์ทั้งหมดที่ใช้เรียกอินสแตนซ์ bash นี้

BASH_VERSINFO

ตัวแปรอาร์เรย์แบบอ่านอย่างเดียวที่มีสมาชิกเก็บข้อมูลเวอร์ชันสำหรับอินสแตนซ์ bash นี้ ค่าที่กำหนดให้กับสมาชิกอาร์เรย์มีดังนี้:

BASH_VERSINFO [ 0]

หมายเลขเวอร์ชันหลัก ( รุ่น )

BASH_VERSINFO [ 1]

หมายเลขเวอร์ชันย่อย ( เวอร์ชัน )

BASH_VERSINFO [ 2]

ระดับแพทช์

BASH_VERSINFO [ 3]

เวอร์ชันการสร้าง

BASH_VERSINFO [ 4]

สถานะการเปิดตัว (เช่น beta1 )

BASH_VERSINFO [ 5]

มูลค่าของ MACHTYPE

BASH_VERSION

ขยายเป็นสตริงที่อธิบายเวอร์ชันของ bash นี้

COMP_CWORD

COMP_LINE

บรรทัดคำสั่งปัจจุบัน ตัวแปรนี้สามารถใช้งานได้เฉพาะในฟังก์ชันเชลล์และคำสั่งภายนอกซึ่งเรียกโดยสิ่งอำนวยความสะดวกที่ตั้งโปรแกรมได้ (ดูที่ การตั้งโปรแกรมเสร็จสิ้น ด้านล่าง)

COMP_POINT

COMP_WORDS

ตัวแปรอาร์เรย์ (ดู อาร์เรย์ ด้านล่าง) ประกอบด้วยคำแต่ละคำในบรรทัดคำสั่งปัจจุบัน ตัวแปรนี้สามารถใช้งานได้เฉพาะในฟังก์ชันเชลล์ที่เรียกโดยสิ่งอำนวยความสะดวกที่ตั้งโปรแกรมได้ (ดูที่ การตั้งโปรแกรมเสร็จสิ้น ด้านล่าง)

DIRSTACK

ตัวแปรอาร์เรย์ (ดู อาร์เรย์ ด้านล่าง) ที่มีเนื้อหาปัจจุบันของกองซ้อนไดเร็กทอรี ไดเร็กทอรีปรากฏขึ้นในกองซ้อนตามลำดับที่แสดงโดย dirs builtin การกำหนดให้กับสมาชิกของตัวแปรอาร์เรย์นี้อาจถูกใช้เพื่อแก้ไขไดเร็กทอรีที่มีอยู่แล้วในกองซ้อน แต่ต้องใช้ตัวช่วยสร้าง pushd และ popd เพื่อเพิ่มและลบไดเร็กทอรี การกำหนดให้กับตัวแปรนี้จะไม่เปลี่ยนไดเร็กทอรีปัจจุบัน ถ้า DIRSTACK ไม่มีการตั้งค่าจะสูญเสียสมบัติพิเศษของมันแม้ว่าจะมีการตั้งค่าใหม่ก็ตาม

EUID

ขยายไปยัง ID ผู้ใช้ที่มีประสิทธิภาพของผู้ใช้ปัจจุบันเริ่มต้นที่การเริ่มต้นระบบของเชลล์ ตัวแปรนี้เป็นแบบอ่านอย่างเดียว

FUNCNAME

ชื่อของฟังก์ชันเชลล์ที่ดำเนินการอยู่ในปัจจุบัน ตัวแปรนี้มีอยู่เฉพาะเมื่อทำงานของเชลล์เท่านั้น การมอบหมาย FUNCNAME ไม่มีผลใด ๆ และส่งกลับสถานะข้อผิดพลาด ถ้า FUNCNAME ไม่มีการตั้งค่าจะสูญเสียคุณสมบัติพิเศษของมันแม้ว่าจะมีการตั้งค่าใหม่ก็ตาม

กลุ่ม

ตัวแปรอาร์เรย์ที่ประกอบด้วยรายการกลุ่มที่ผู้ใช้ปัจจุบันเป็นสมาชิก การมอบหมายงานให้กับ GROUPS ไม่มีผลใด ๆ และส่งกลับสถานะข้อผิดพลาด หาก กลุ่ม ถูกยกเลิกการทำเครื่องหมายจะสูญเสียคุณสมบัติพิเศษแม้ว่าจะมีการตั้งค่าใหม่

HISTCMD

หมายเลขประวัติหรือดัชนีในรายการประวัติของคำสั่งปัจจุบัน หากไม่ได้ตั้งค่า HISTCMD จะสูญเสียคุณสมบัติพิเศษของตัวเองแม้ว่าจะมีการตั้งค่าใหม่ก็ตาม

HOSTNAME

ตั้งค่าชื่อโฮสต์ปัจจุบันโดยอัตโนมัติ

HOSTTYPE

ตั้งค่าเป็นสตริงที่อธิบายประเภทของเครื่องที่ bash ทำงานได้โดยอัตโนมัติ ค่าดีฟอลต์คือขึ้นอยู่กับระบบ

LineNo

แต่ละครั้งที่มีการอ้างอิงพารามิเตอร์นี้เปลือกจะแทนที่เลขฐานสิบตัวเลขแทนจำนวนบรรทัดลำดับปัจจุบัน (เริ่มต้นด้วย 1) ภายในสคริปต์หรือฟังก์ชัน เมื่อไม่ได้อยู่ในสคริปต์หรือฟังก์ชันค่าที่แทนจะไม่รับประกันว่าจะมีความหมาย หากไม่มีการตั้งค่า LINENO จะสูญเสียคุณสมบัติพิเศษของตัวเองแม้ว่าจะมีการตั้งค่าใหม่

MACHTYPE

ตั้งค่าเป็นสตริงที่อธิบายประเภทระบบที่ bash ทำงานได้โดยอัตโนมัติในรูปแบบมาตรฐานของ ซีพียูของ บริษัท GNU ตามมาตรฐาน ค่าดีฟอลต์คือขึ้นอยู่กับระบบ

OLDPWD

ไดเร็กทอรีการทำงานก่อนหน้านี้ที่กำหนดโดยคำสั่ง cd

OPTARG

ค่าของอาร์กิวเมนต์ตัวเลือกสุดท้ายที่ประมวลผลโดยคำสั่ง builtin getopts (ดูคำสั่ง SHELL BUILTIN ด้านล่าง)

OPTIND

ดัชนีของอาร์กิวเมนต์ถัดไปที่จะประมวลผลโดยคำสั่ง builtin getopts (ดูคำสั่ง SHELL BUILTIN ด้านล่าง)

ostype

ตั้งค่าเป็นสตริงที่อธิบายถึงระบบปฏิบัติการที่ ทุบตี กำลังรันอยู่โดยอัตโนมัติ ค่าดีฟอลต์คือขึ้นอยู่กับระบบ

PIPESTATUS

ตัวแปรอาร์เรย์ (ดู อาร์เรย์ ด้านล่าง) ที่มีรายการค่าสถานะทางออกจากกระบวนการในท่อนำหน้าส่วนใหญ่ที่เพิ่งเปิดตัวล่าสุด (ซึ่งอาจมีเพียงคำสั่งเดียว)

PPID

รหัสกระบวนการของผู้ปกครองของเชลล์ ตัวแปรนี้เป็นแบบอ่านอย่างเดียว

PWD

ไดเร็กทอรีการทำงานปัจจุบันที่กำหนดโดยคำสั่ง cd

RANDOM

แต่ละครั้งที่มีการอ้างอิงพารามิเตอร์นี้จะมีการสร้างเลขสุ่มระหว่าง 0 ถึง 32767 ลำดับของตัวเลขสุ่มอาจถูกเตรียมใช้งานโดยการกำหนดค่าให้กับ RANDOM หาก RANDOM ไม่มีการตั้งค่าจะสูญเสียสมบัติพิเศษของตัวเองแม้ว่าจะมีการตั้งค่าใหม่

ตอบ

ตั้งค่าเป็นบรรทัดของอินพุตที่อ่านโดยคำสั่ง builtin อ่าน เมื่อไม่มีอาร์กิวเมนต์ที่ให้มา

วินาที

แต่ละครั้งที่มีการอ้างอิงพารามิเตอร์นี้จำนวนวินาทีที่มีการเรียกคืนคำร้องขอของเชลล์ หากมีการกำหนดมูลค่าให้กับ SECONDS ค่าที่ส่งคืนเมื่อมีการอ้างอิงตามมาคือจำนวนวินาทีที่นับตั้งแต่ได้รับมอบหมายบวกค่าที่กำหนด หาก SECONDS ถูกยกเลิกการทำเครื่องหมายจะสูญเสียสมบัติพิเศษแม้ว่าจะมีการตั้งค่าใหม่

SHELLOPTS

รายการตัวเลือกเชลล์ที่เปิดใช้งานที่คั่นด้วยเครื่องหมายทวิภาค แต่ละคำในรายการเป็นอาร์กิวเมนต์ที่ถูกต้องสำหรับตัวเลือก -o กับคำสั่ง builtin built-in (ดูคำสั่ง SHELL BUILTIN ด้านล่าง) ตัวเลือกที่ปรากฏใน SHELLOPTS คือรายงานที่รายงานตาม ชุด -o ถ้าตัวแปรนี้อยู่ในสภาพแวดล้อมเมื่อ ทุบตี เริ่มทำงานตัวเลือกของเชลล์แต่ละตัวในรายการจะถูกเปิดใช้งานก่อนที่จะอ่านไฟล์เริ่มต้น ตัวแปรนี้เป็นแบบอ่านอย่างเดียว

SHLVL

เพิ่มขึ้นทีละหนึ่งครั้งที่เริ่ม ทุบตี bash

โพสต์

ขยายไปยัง ID ผู้ใช้ของผู้ใช้ปัจจุบันเริ่มต้นที่การเริ่มต้นระบบของเชลล์ ตัวแปรนี้เป็นแบบอ่านอย่างเดียว

ตัวแปรต่อไปนี้ใช้โดยเชลล์ ในบางกรณี ทุบตี กำหนดค่าเริ่มต้นให้กับตัวแปร กรณีเหล่านี้จะระบุไว้ด้านล่าง

BASH_ENV

ถ้าพารามิเตอร์นี้ถูกตั้งค่าไว้เมื่อ ทุบตี กำลังเรียกใช้สคริปต์เชลล์ค่าของไฟล์ถูกตีความว่าเป็นชื่อไฟล์ที่มีคำสั่งเพื่อเริ่มต้นเชลล์เช่นใน ~ / .bashrc ค่าของ BASH_ENV ขึ้น อยู่กับการขยายพารามิเตอร์การแทนที่คำสั่งและการขยายตัวทางคณิตศาสตร์ก่อนที่จะถูกตีความว่าเป็นชื่อไฟล์ PATH ไม่ใช้ในการค้นหาชื่อไฟล์ผลลัพธ์

CDPATH

เส้นทางการค้นหาคำสั่ง cd นี่คือรายการไดเรกทอรีที่คั่นด้วยลำไส้ใหญ่ซึ่งแฝงอยู่ในไดเร็กทอรีปลายทางที่ระบุโดยคำสั่ง cd ค่าตัวอย่างคือ ".: ~: / usr"

คอลัมน์

ใช้โดยคำสั่ง builtin เลือก เพื่อกำหนดความกว้างของขั้วเมื่อพิมพ์เลือกรายการ ตั้งค่าโดยอัตโนมัติเมื่อได้รับ SIGWINCH

COMPREPLY

ตัวแปรอาร์เรย์จากที่ bash อ่านความสำเร็จที่เป็นไปได้ที่สร้างขึ้นโดยฟังก์ชันเชลล์ซึ่งถูกเรียกโดยสิ่งอำนวยความสะดวกที่ตั้งโปรแกรมได้ (ดูที่ การตั้งโปรแกรมเสร็จสิ้น ด้านล่าง)

FCEDIT

ตัวแก้ไขค่าเริ่มต้นสำหรับคำสั่ง fc builtin

FIGNORE

รายการ suffixes ที่คั่นด้วยเครื่องหมายลำไส้ใหญ่ที่จะละเว้นเมื่อดำเนินการเสร็จสิ้นชื่อไฟล์ (ดู READLINE ด้านล่าง) ชื่อไฟล์ที่มีส่วนต่อท้ายตรงกับรายการใดรายการหนึ่งใน FIGNORE จะถูกแยกออกจากรายการชื่อไฟล์ที่ตรงกัน ค่าตัวอย่างคือ ".o: ~"

GLOBIGNORE

รายการแบบจําลองที่คั่นด้วยคั่นด้วยลำไส้ใหญ่ซึ่งกำหนดชุดของชื่อไฟล์ที่จะถูกเพิกเฉยโดยการขยายพา ธ ถ้าชื่อไฟล์ที่จับคู่โดยรูปแบบการขยายพา ธ ยังตรงกับรูปแบบใดรูปแบบหนึ่งใน GLOBIGNORE จะถูกลบออกจากรายการที่ตรงกัน

HISTCONTROL

หากตั้งค่าเป็น ignorespace บรรทัดที่ขึ้นต้นด้วยอักขระ พื้นที่ จะไม่ถูกป้อนลงในรายการประวัติ หากตั้งค่าเป็น ignoredups จะไม่ได้ป้อนบรรทัดที่ตรงกับบรรทัดประวัติล่าสุด ค่าของ ignoreboth รวมสองตัวเลือกไว้ หากไม่มีการตั้งค่าหรือหากตั้งค่าอื่นนอกเหนือจากข้างต้นบรรทัดทั้งหมดที่อ่านโดยโปรแกรมแยกวิเคราะห์จะถูกบันทึกไว้ในรายการประวัติโดยขึ้นอยู่กับค่าของ HISTIGNORE ฟังก์ชันนี้ถูกแทนที่โดย HISTIGNORE บรรทัดที่สองและบรรทัดถัดไปของคำสั่งผสมหลายบรรทัดจะไม่ได้รับการทดสอบและจะถูกเพิ่มลงในประวัติโดยไม่คำนึงถึงค่าของ HISTCONTROL

HISTFILE

ชื่อของไฟล์ที่บันทึกประวัติคำสั่ง (ดู ประวัติ ด้านล่าง) ค่าดีฟอลต์คือ ~ / .bash_history ถ้าไม่มีการตั้งค่าประวัติคำสั่งจะไม่ถูกบันทึกไว้เมื่อออกจากเชลล์แบบโต้ตอบ

HISTFILESIZE

จำนวนบรรทัดสูงสุดที่มีอยู่ในไฟล์ประวัติ เมื่อตัวแปรนี้ได้รับการกำหนดค่าไฟล์ประวัติจะตัดทอนถ้าจำเป็นต้องมีจำนวนไม่เกินจำนวนบรรทัด ค่าดีฟอลต์คือ 500 ไฟล์ประวัติจะถูกตัดทอนให้เหลือขนาดนี้หลังจากเขียนข้อความดังกล่าวเมื่อออกจากเปลือกโต้ตอบ

HISTIGNORE

รายการแบบจําลองที่คั่นด้วยคั่นด้วยสัณฐานของรูปแบบที่ใช้ในการตัดสินใจว่าบรรทัดคำสั่งใดควรได้รับการบันทึกไว้ในรายการประวัติ แต่ละรูปแบบจะถูกยึดไว้ที่จุดเริ่มต้นของบรรทัดและต้องตรงกับบรรทัดที่สมบูรณ์ (ไม่มีการผนวก ` * 'ไว้) แต่ละรูปแบบจะถูกทดสอบกับเส้นหลังจากตรวจสอบตามที่ HISTCONTROL ระบุไว้ นอกเหนือจากรูปแบบที่พบโดยทั่วไปของเปลือกแล้ว ` & 'จะตรงกับบรรทัดประวัติก่อนหน้า ` & 'อาจจะหลบหนีโดยใช้เครื่องหมายแบ็กสแลช; เครื่องหมายทับขวาจะถูกลบออกก่อนที่จะพยายามจับคู่ บรรทัดที่สองและบรรทัดถัดไปของคำสั่งผสมหลายบรรทัดจะไม่ได้รับการทดสอบและจะเพิ่มลงในประวัติโดยไม่คำนึงถึงคุณค่าของ HISTIGNORE

HISTSIZE

จำนวนคำสั่งที่ต้องจดจำในประวัติคำสั่ง (ดู ประวัติ ด้านล่าง) ค่าเริ่มต้นคือ 500

บ้าน

ไดเรกทอรีบ้านของผู้ใช้ปัจจุบัน อาร์กิวเมนต์เริ่มต้นสำหรับคำสั่ง builtin ของ ซีดี ค่าของตัวแปรนี้ยังใช้เมื่อทำการขยายตัวหนอน

HOSTFILE

ประกอบด้วยชื่อของไฟล์ในรูปแบบเดียวกับ / etc / hosts ที่ควรจะอ่านเมื่อเปลือกต้องกรอกชื่อโฮสต์ รายการความสำเร็จของชื่อโฮสต์ที่เป็นไปได้อาจเปลี่ยนแปลงได้ในขณะที่เชลล์กำลังทำงานอยู่ ครั้งต่อไปที่ชื่อโฮสต์เสร็จสิ้นหลังจากที่มีการเปลี่ยนแปลงค่า bash เพิ่มเนื้อหาของไฟล์ใหม่ลงในรายการที่มีอยู่ ถ้ามีการตั้งค่า HOSTFILE แต่ไม่มีค่า ทุบตี พยายามอ่าน / etc / hosts เพื่อดูรายการความสำเร็จของชื่อโฮสต์ที่เป็นไปได้ เมื่อ HOSTFILE ไม่มีการตั้งค่ารายการชื่อโฮสต์จะถูกลบออก

ไอเอฟเอ

ตัว คั่นฟิลด์ภายใน ที่ใช้สำหรับการแบ่งคำหลังการขยายและแบ่งบรรทัดเป็นคำโดยใช้คำสั่ง builtin แบบ อ่าน ค่าดีฟอลต์คือ `` ''

IGNOREEOF

ควบคุมการทำงานของเชลล์แบบโต้ตอบเมื่อได้รับอักขระ EOF เป็นอินพุตเดียว ถ้าตั้งค่าคือจำนวนอักขระ EOF ที่ ต่อเนื่องซึ่งต้องพิมพ์เป็นอักขระตัวแรกบนบรรทัดอินพุตก่อนที่จะ ทุบตี bash ถ้าตัวแปรมีอยู่ แต่ไม่มีค่าตัวเลขหรือไม่มีค่าค่าดีฟอลต์คือ 10 ถ้าไม่มีอยู่ EOF หมายถึงจุดสิ้นสุดของการป้อนข้อมูลลงในเชลล์

inputrc

ชื่อไฟล์สำหรับไฟล์ startup แบบอ่านอย่างเดียวแทนที่ค่าเริ่มต้นของ ~ / .inputrc (ดู READLINE ด้านล่าง)

LANG

ใช้เพื่อระบุประเภทสถานที่สำหรับหมวดหมู่ใด ๆ ที่ไม่ได้เลือกไว้โดยเฉพาะที่มีตัวแปรที่ขึ้นต้นด้วย LC_

LC_ALL

ตัวแปรนี้แทนที่ค่าของ LANG และตัวแปร LC_ อื่น ๆ ที่ระบุประเภทโลแคล

LC_COLLATE

ตัวแปรนี้กำหนดลำดับการจัดเรียงที่ใช้ในการเรียงลำดับผลลัพธ์ของการขยายเส้นทางและกำหนดลักษณะการทำงานของการแสดงออกในช่วงชั้นที่เท่ากันและจัดเรียงลำดับภายในการขยายเส้นทางและการจับคู่รูปแบบ

LC_CTYPE

ตัวแปรนี้กำหนดการแปลความหมายของอักขระและลักษณะการทำงานของคลาสอักขระภายในการขยายเส้นทางและการจับคู่รูปแบบ

LC_MESSAGES

ตัวแปรนี้กำหนดตำแหน่งที่ตั้งที่ใช้ในการแปลสตริงที่มีการอ้างอิงสองครั้งที่นำหน้าด้วยเครื่องหมาย $

LC_NUMERIC

ตัวแปรนี้กำหนดประเภทภาษาที่ใช้สำหรับการจัดรูปแบบตัวเลข

LINES

ใช้โดยคำสั่ง builtin เลือก เพื่อกำหนดความยาวของคอลัมน์สำหรับรายการการเลือกการพิมพ์ ตั้งค่าโดยอัตโนมัติเมื่อได้รับ SIGWINCH

MAIL

ถ้าพารามิเตอร์นี้ถูกตั้งค่าเป็นชื่อไฟล์และไม่มีการตั้งค่าตัวแปร MAILPATH bash จะ แจ้งให้ผู้ใช้ทราบถึงการมาถึงของจดหมายในไฟล์ที่ระบุ

Mailcheck

ระบุความถี่ในการตรวจสอบ bash สำหรับจดหมาย ค่าเริ่มต้นคือ 60 วินาที เมื่อถึงเวลาที่ต้องตรวจสอบอีเมลเปลือกจะทำเช่นนั้นก่อนที่จะแสดงพรอมต์หลัก ถ้าตัวแปรนี้ถูกยกเลิกการตั้งค่าหรือตั้งค่าเป็นค่าที่ไม่ใช่ตัวเลขมากกว่าหรือเท่ากับศูนย์เชลล์จะปิดการใช้งานการตรวจสอบอีเมล

MAILPATH

รายการชื่อไฟล์ที่คั่นด้วยเครื่องหมายลำไส้ใหญ่เพื่อตรวจสอบอีเมล ข้อความที่จะพิมพ์เมื่อจดหมายมาถึงในไฟล์ใดไฟล์หนึ่งอาจถูกระบุโดยการแยกชื่อไฟล์ออกจากข้อความที่มี `? ' เมื่อใช้ในข้อความของข้อความ $ _ ขยายเป็นชื่อของไฟล์จดหมายปัจจุบัน ตัวอย่าง:

MAILPATH = '/ var / mail / bfox? "คุณมีจดหมาย": ~ / shell-mail? "$ _ มีเมล์!' '

Bash จัดหาค่าดีฟอลต์สำหรับตัวแปรนี้ แต่ตำแหน่งของไฟล์เมลของผู้ใช้ที่ใช้จะขึ้นอยู่กับระบบ (เช่น / var / mail / $ USER )

OPTERR

ถ้าตั้งค่าเป็น 1 ทุบตี จะแสดงข้อความผิดพลาดที่สร้างโดยคำสั่ง builtin getopts (ดูคำสั่ง SHELL BUILTIN ด้านล่าง) OPTERR ถูกเตรียมใช้งานเป็น 1 ทุกครั้งที่เชลล์เรียกใช้หรือเรียกใช้สคริปต์เชลล์

เส้นทาง

เส้นทางการค้นหาคำสั่ง เป็นไดเร็กทอรีที่แยกออกจากกันโดยลำไส้ใหญ่ซึ่งแฝงอยู่ในคำสั่ง (ดูการ ดำเนินการ คำ สั่ง ด้านล่าง) เส้นทางเริ่มต้นขึ้นอยู่กับระบบและกำหนดโดยผู้ดูแลระบบที่ติดตั้ง bash ค่าทั่วไปคือ `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''

POSIXLY_CORRECT

ถ้าตัวแปรนี้อยู่ในสภาพแวดล้อมเมื่อเริ่มต้น bash เปลือกจะเข้าสู่ โหมด posix ก่อนที่จะอ่านไฟล์เริ่มต้นเหมือนกับว่าได้มีการจัด เตรียมตัว เลือกการอุทธรณ์ - โป๊ก ไว้แล้ว ถ้ามีการตั้งค่าในขณะที่เชลล์กำลังทำงานอยู่ bash จะเปิดใช้งาน posix mode เช่นถ้า ชุด คำสั่ง -o posix ถูก execute

PROMPT_COMMAND

ถ้าตั้งค่าจะถูกเรียกใช้เป็นคำสั่งก่อนที่จะออกแต่ละ prompt หลัก

PS1

ค่าของพารามิเตอร์นี้ได้รับการขยาย (ดูที่ PROMPTING ด้านล่าง) และใช้เป็นสตริงพรอมต์หลัก ค่าดีฟอลต์คือ `` \ s- \ v \ $ ''

PS2

ค่าของพารามิเตอร์นี้ถูกขยายเช่นเดียวกับ PS1 และใช้เป็นสตริงพรอมต์รอง ค่าดีฟอลต์คือ `` > ''

PS3

ค่าของพารามิเตอร์นี้ใช้เป็นพรอมต์สำหรับคำสั่ง select (โปรดดูที่ SHELL GRAMMAR ด้านบน)

PS4

ค่าของพารามิเตอร์นี้ถูกขยายเช่นเดียวกับ PS1 และค่าจะถูกพิมพ์ก่อน ทับ คำสั่งแต่ละคำจะแสดงขึ้นในระหว่างการติดตามการดำเนินการ อักขระตัวแรกของ PS4 จะถูกจำลองแบบหลาย ๆ ครั้งตามความจำเป็นเพื่อระบุระดับการ เลี้ยวลอด หลายระดับ ค่าดีฟอลต์คือ `` + ''

TIMEFORMAT

ค่าของพารามิเตอร์นี้ถูกใช้เป็นสตริงรูปแบบที่ระบุว่าควรแสดงข้อมูลระยะเวลาสำหรับท่อที่นำหน้าด้วยคำสงวนสิทธิ์ไว้อย่างไร อักขระ % แนะนำลำดับการหลบหนีที่ขยายไปเป็นค่าเวลาหรือข้อมูลอื่น ๆ ลำดับหนีและความหมายของพวกเขามีดังนี้; วงเล็บแสดงถึงส่วนที่เลือกได้

%%

% อักษร %

% [ p ] [l] R

เวลาที่ผ่านไปเป็นวินาที

% [ p ] [l] U

จำนวนวินาทีของ CPU ที่ใช้ในโหมดผู้ใช้

% [ p ] [l] S

จำนวนวินาทีของ CPU ที่ใช้ในโหมดระบบ

% P

เปอร์เซ็นต์ของ CPU คำนวณเป็น (% U +% S) /% R

ตัวเลือก p คือตัวเลขที่ระบุ ความแม่นยำ จำนวนเศษทศนิยมหลังจากจุดทศนิยม ค่าเป็น 0 ไม่ทำให้จุดทศนิยมหรือเศษส่วนออก สามารถระบุตำแหน่งได้สูงสุดสามตำแหน่งหลังจากระบุจุดทศนิยม ค่าของ p มากกว่า 3 จะเปลี่ยนเป็น 3 ถ้าไม่ได้ระบุค่า p จะใช้ค่า 3

ตัวเลือก l ระบุรูปแบบที่ยาวขึ้นรวมถึงนาทีของแบบฟอร์ม MM m SS FF s ค่าของ p กำหนดว่ามีเศษหรือไม่

ถ้าไม่มีการตั้งค่าตัวแปรนี้ ทุบตี จะทำราวกับว่ามันมีค่า $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' ถ้าค่าเป็นโมฆะไม่มีข้อมูลเวลาจะปรากฏขึ้น บรรทัดใหม่ที่ต่อท้ายจะถูกเพิ่มเมื่อมีการแสดงสตริงรูปแบบ

TMOUT

ถ้าตั้งค่าเป็นศูนย์มากกว่า TMOUT จะถือว่าเป็นระยะหมดเวลาเริ่มต้นสำหรับ readin อ่าน คำสั่ง select จะสิ้นสุดลงถ้า input ไม่มาถึงหลังจาก TMOUT วินาทีเมื่อ input มาจากเทอร์มินัล ในเปลือกแบบโต้ตอบมูลค่าจะถูกตีความว่าเป็นจำนวนวินาทีที่ต้องรอให้ป้อนข้อมูลหลังจากที่ได้รับพรอมต์หลัก Bash จะสิ้นสุดลงหลังจากรอเป็นวินาทีถ้าอินพุตไม่มาถึง

auto_resume

ตัวแปรนี้ควบคุมวิธีที่เปลือกทำงานกับผู้ใช้และการควบคุมงาน ถ้าตัวแปรนี้ถูกตั้งค่าคำสั่งง่ายๆแบบหนึ่งคำโดยไม่มีการเปลี่ยนเส้นทางจะถือว่าเป็นผู้สมัครสำหรับการเริ่มทำงานใหม่ที่มีอยู่ ไม่มีความคลุมเครืออนุญาต; ถ้ามีมากกว่าหนึ่งงานที่ขึ้นต้นด้วยข้อความที่พิมพ์ไว้งานที่ได้รับการเข้าถึงล่าสุดจะถูกเลือก ชื่อ ของงานที่หยุดทำงานในบริบทนี้คือบรรทัดคำสั่งที่ใช้เพื่อเริ่มต้น หากตั้งค่าให้ ถูกต้อง สตริงที่ระบุต้องตรงกับชื่อของงานที่หยุดลง หากตั้งค่าเป็น สตริงย่อย สายอักขระที่ป้อนต้องตรงกับสตริงย่อยของชื่อของงานที่หยุดทำงาน ค่า สตริงที่ มีฟังก์ชันการทำงานที่คล้ายคลึงกับ % ตัวระบุงาน (ดู JOB CONTROL ด้านล่าง) หากตั้งค่าใด ๆ สตริงที่ระบุจะต้องเป็นคำนำหน้าของชื่องานที่หยุดการทำงาน นี้มีฟังก์ชันการทำงานที่คล้ายคลึงกับตัวระบุงาน %

histchars

อักขระสองหรือสามตัวที่ควบคุมการขยายประวัติและโทเค็นนิ่ง (ดูการ ขยายเวลาทางประวัติศาสตร์ ด้านล่าง) อักขระตัวแรกคืออักขระการ ขยายประวัติ ตัวละครซึ่งเป็นสัญญาณเริ่มต้นของการขยายประวัติโดยปกติ ` ! ' อักขระตัวที่สองคืออักขระ ทดแทนอย่างรวดเร็ว ซึ่งใช้เป็นชวเลขเพื่อเรียกใช้คำสั่งก่อนหน้านี้อีกครั้งแทนที่สตริงหนึ่งสำหรับคำสั่งอื่นในคำสั่ง ค่าดีฟอลต์คือ ` ^ ' อักขระที่สามที่เป็นตัวเลือกคืออักขระที่ระบุว่าส่วนที่เหลือของบรรทัดเป็นความคิดเห็นเมื่อพบว่าเป็นอักขระตัวแรกของคำโดยปกติ ` # ' อักขระแสดงความคิดเห็นในประวัติการใช้งานจะทำให้ประวัติการใช้การทดแทนข้ามไปสำหรับคำที่เหลืออยู่ในบรรทัด ไม่จำเป็นต้องทำให้ตัวแบ่งส่วนเชลล์ใช้ส่วนที่เหลือของบรรทัดเป็นความคิดเห็น

อาร์เรย์

Bash ให้ตัวแปรอาร์เรย์หนึ่งมิติ ตัวแปรใดก็ได้ที่สามารถใช้เป็นอาร์เรย์ builtin ประกาศ จะประกาศอาร์เรย์อย่างชัดแจ้ง ไม่มีขีด จำกัด สูงสุดสำหรับขนาดของอาร์เรย์และข้อกำหนดใด ๆ ที่สมาชิกจะได้รับการจัดทำดัชนีหรือกำหนดไว้อย่างต่อเนื่อง อาร์เรย์มีการจัดทำดัชนีโดยใช้จำนวนเต็มและเป็นศูนย์

อาร์เรย์ถูกสร้างขึ้นโดยอัตโนมัติหากมีการกำหนดตัวแปรใด ๆ ให้ใช้ ชื่อ ไวยากรณ์ [ subscript ] = value ตัว ห้อย จะถือว่าเป็นนิพจน์เลขคณิตที่ต้องประเมินเป็นจำนวนมากกว่าหรือเท่ากับศูนย์ เมื่อต้องการประกาศอาร์เรย์อย่างชัดเจนให้ใช้ declarare -a (ดู คำสั่ง SHELL BUILTIN ด้านล่าง) ประกาศ - ชื่อ [ subscript ] เป็นที่ยอมรับ ห้อย จะถูกละเลย สามารถระบุแอตทริบิวต์สำหรับตัวแปรอาร์เรย์โดยใช้ deklarins และ readinsly builtins แต่ละแอตทริบิวต์มีผลกับสมาชิกทั้งหมดของอาร์เรย์

อาร์เรย์ถูกกำหนดให้ใช้การกำหนดแบบผสมของ ชื่อ ฟอร์ม = ( ค่า 1 ... ค่า n ) โดยที่แต่ละ ค่า มีรูปแบบ [ subscript ] = สตริง ต้องการ สตริง เท่านั้น ถ้าวงเล็บตัวเลือกและ subscript มีให้ระบุดัชนีที่ถูกกำหนดให้; มิฉะนั้นดัชนีขององค์ประกอบที่กำหนดคือดัชนีสุดท้ายที่กำหนดโดยแถลงบวกหนึ่ง การจัดทำดัชนีเริ่มต้นที่ศูนย์ ไวยากรณ์นี้ยังเป็นที่ยอมรับโดย builtin ที่ ประกาศ ไว้ แต่ละอาร์เรย์อาจถูกกำหนดให้ใช้ ชื่อ [ subscript ] = ค่า ซินแท็คซ์ที่นำมาใช้ด้านบน

ใช้ นิพจน์ที่ไม่ได้ตั้งค่า เพื่อทำลายอาร์เรย์ unset name [ subscript ] ทำลายองค์ประกอบ array ที่ index subscript ยกเลิกการตั้ง ชื่อ ที่ ชื่อ เป็นอาร์เรย์หรือ ยกเลิกการตั้ง ชื่อ [ subscript ] ซึ่งเป็น subscript * หรือ @ เอาอาร์เรย์ทั้งหมด

ประกาศ ภายใน และ readins เท่านั้นแต่ละตัวเลือก -a เพื่อระบุอาร์เรย์ ตัว อ่าน readin ยอมรับตัวเลือก -a เพื่อกำหนดรายการคำที่อ่านจากอินพุตมาตรฐานไปยังอาร์เรย์ ชุด และ ประกาศ builtins แสดงค่าอาเรย์ในลักษณะที่ช่วยให้สามารถนำมาใช้ซ้ำได้ตามที่ได้รับมอบหมาย

ขยาย

การขยายจะทำในบรรทัดคำสั่งหลังจากที่มันถูกแยกออกเป็นคำ มีการขยายตัวเจ็ดประเภท ได้แก่ การขยายตัวของ รั้งการขยายตัว หนอน พารามิเตอร์และการขยายตัวแปรการ แทนคำสั่ง การขยายเลขคณิตการ แบ่งคำ และ การขยายพา ธ

ลำดับการขยายคือการขยายตัวรั้งการขยายตัวหนอนพารามิเตอร์การขยายตัวแปรและเลขคณิตและการแทนที่คำสั่ง (ทำในแบบซ้ายไปขวา) การแบ่งคำและการขยายพา ธ

ในระบบที่สามารถรองรับได้มีการขยายเพิ่มเติมที่ใช้ได้: การแทนที่กระบวนการ

การขยายตัวรั้ง

การขยายตัวของรั้ง เป็นกลไกที่อาจสร้างสตริงโดยพลการ กลไกนี้คล้ายกับ การขยายเส้นทางพา ธ แต่ชื่อไฟล์ที่สร้างขึ้นไม่จำเป็นต้องมีอยู่ รูปแบบที่จะรั้งขยายเป็นรูปแบบของ คำนำที่ เป็นทางเลือกตามด้วยชุดของสายที่คั่นด้วยจุลภาคระหว่างคู่วงเล็บตามด้วยข้อความที่เป็นตัวเลือก คำนำมีคำนำหน้าไปยังแต่ละสตริงที่อยู่ภายในเครื่องหมายวงเล็บและเครื่องหมายคำพูดจะถูกผนวกเข้ากับสตริงแต่ละอันซึ่งจะขยายไปทางซ้ายไปทางขวา

การขยายวงเล็บอาจจะซ้อนกัน ไม่ได้จัดเรียงผลลัพธ์ของสตริงที่ขยายออกไป ซ้ายไปขวาจะถูกเก็บรักษาไว้ ยกตัวอย่างเช่น { d, c, b } e จะขยายเป็น `ade ace abe '

การขยายตัวของรั้งจะดำเนินการก่อนการขยายอื่น ๆ และจะมีการเก็บรักษาอักขระพิเศษใด ๆ สำหรับส่วนขยายอื่น ๆ ในผลลัพธ์ เป็นข้อความต้นฉบับอย่างเคร่งครัด Bash ไม่ใช้การตีความคำพูดใด ๆ ในบริบทของการขยายหรือข้อความระหว่างวงเล็บปีกกา

สร้างนี้มักใช้เป็นชวเลขเมื่อคำนำหน้าทั่วไปของสตริงที่สร้างขึ้นจะยาวกว่าในตัวอย่างข้างต้น:

mkdir / usr / local / src / bash / {old, ใหม่, dist, bugs}

หรือ

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

การขยายวงเล็บแนะนำความไม่ลงรอยกันเล็กน้อยกับเวอร์ชันประวัติศาสตร์ของ sh sh ไม่ใช้เครื่องหมายวงเล็บเปิดหรือปิดเฉพาะเมื่อปรากฏเป็นส่วนหนึ่งของคำและเก็บรักษาไว้ในเอาต์พุต Bash จะเอาเครื่องหมายวงเล็บออกจากคำที่เป็นผลมาจากการขยายวงเล็บ ตัวอย่างเช่นคำที่ป้อนไปยัง sh ตามที่ ไฟล์ {1,2} ปรากฏขึ้นเหมือนกันในเอาต์พุต คำเดียวกันจะถูกส่งออกเป็น file1 file2 หลังจากขยายตัวโดย bash หากต้องการความเข้ากันได้อย่างเข้มงวดกับ sh ให้เริ่ม ทุบตี ด้วยตัวเลือก + B หรือปิดใช้งานการขยายตัวรั้งด้วยตัวเลือก + B ไปยังคำสั่ง set (ดูคำสั่ง SHELL BUILTIN ด้านล่าง)

การขยายตัวทิลเดอร์

หากคำเริ่มต้นด้วยตัวอันธิกาที่ไม่มีการอ้างอิง (` ~ ') อักขระทั้งหมดที่อยู่ก่อนเครื่องหมายทับที่ไม่มีการอ้างสิทธิ์เป็นครั้งแรก (หรืออักขระทั้งหมดหากไม่มีเครื่องหมายทับ unquoted) ถือเป็น คำนำหน้าตัวอทิลเจ็ ต ถ้าไม่มีอักขระใด ๆ ในเครื่องหมายคำนำหน้าตัวอันธิกาอักขระที่อยู่ในเครื่องหมายคำนำหน้าตัวต่อหน้าทิลเด์จะถือว่าเป็น ชื่อล็อกอินที่ เป็นไปได้ ถ้าชื่อการเข้าสู่ระบบนี้เป็นสตริงที่เป็น null เครื่องหมายไทด์จะถูกแทนที่ด้วยค่าของพารามิเตอร์เชลล์ HOME ถ้าไม่ได้ตั้งค่า HOME จะมีการแทนที่ไดเรกทอรีบ้านของผู้ใช้ที่ใช้เปลือกแทน มิฉะนั้นค่านำหน้าจะถูกแทนที่ด้วยไดเร็กทอรีโฮมที่เชื่อมโยงกับชื่อล็อกอินที่ระบุ

ถ้าทิลเดอร์ - คำนำหน้าเป็น `~ + 'ค่าของตัวแปรเชลล์ PWD จะแทนที่ตัวหนอน - คำนำหน้า ถ้าทิลเดอร์ - คำนำหน้าเป็น `~ - 'ค่าของตัวแปรเชลล์ OLDPWD ถ้ามีการตั้งค่าถูกแทนที่ ถ้าอักขระที่อยู่หลังตัวหนอนในตัวอันธพาล - คำนำหน้าประกอบด้วย N จำนวนตัวเลือกที่มีคำนำหน้า `+ 'หรือ` -' เครื่องหมายพาสเวิร์ดจะถูกแทนที่ด้วยอิลิเมนต์ที่สอดคล้องกันจากสแต็คไดเร็กทอรีเนื่องจากจะปรากฏขึ้น โดย dirs builtin ที่เรียกใช้กับ tilde-prefix เป็นอาร์กิวเมนต์ ถ้าตัวอักษรที่อยู่หลังเครื่องหมายตัวหนอนในตัวอันธพาล - คำนำหน้าประกอบด้วยตัวเลขโดยไม่ต้องนำ `+ 'หรือ` -', `+ 'จะถูกสันนิษฐาน

หากชื่อการเข้าสู่ระบบไม่ถูกต้องหรือการขยายตัวหนอนล้มเหลวคำนี้จะไม่มีการเปลี่ยนแปลง

การมอบหมายตัวแปรแต่ละรายการจะได้รับการตรวจสอบสำหรับคำนำหน้าตัวอับชักที่ไม่มีการอ้างอิงโดยทันทีหลังจาก a : หรือ = ในกรณีนี้การขยายตัวหนอนจะดำเนินการเช่นกัน ดังนั้นหนึ่งอาจใช้ชื่อไฟล์กับ tildes ในการกำหนด เส้นทางเส้นทาง MAILPATH และ CDPATH และเปลือกกำหนดค่าที่ขยาย

การขยายค่าพารามิเตอร์

อักขระ ` $ 'แนะนำการขยายพารามิเตอร์การแทนที่คำสั่งหรือการขยายเลขคณิต ชื่อพารามิเตอร์หรือสัญลักษณ์ที่จะขยายอาจอยู่ในเครื่องหมายวงเล็บซึ่งเป็นตัวเลือก แต่ให้บริการเพื่อปกป้องตัวแปรที่จะขยายจากตัวอักษรทันทีหลังจากที่มันซึ่งสามารถตีความได้ว่าเป็นส่วนหนึ่งของชื่อ

เมื่อมีการใช้เครื่องหมายวงเล็บตัวจับคู่ที่สิ้นสุดการจับคู่เป็นเครื่องหมาย ` @ 'แรกที่ไม่ได้หนีจากเครื่องหมายทับขวาหรือภายในสตริงที่ยกมาและไม่อยู่ในการขยายตัวทางคณิตศาสตร์ที่ฝังตัวการแทนที่คำสั่งหรือการขยายตัวแบบ paramter

ค่าของ พารามิเตอร์ ถูกแทนที่ วงเล็บปีกกาจะต้องใช้เมื่อ พารามิเตอร์ เป็น พารามิเตอร์ ตำแหน่งที่มีมากกว่าหนึ่งหลักหรือเมื่อมี พารามิเตอร์ ตามด้วยอักขระที่ไม่ได้ถูกตีความว่าเป็นส่วนหนึ่งของชื่อ

ในแต่ละกรณีด้านล่าง คำ ขึ้นอยู่กับการขยายตัวหนอนขยายพารามิเตอร์การแทนคำสั่งและการขยายตัวทางคณิตศาสตร์ เมื่อไม่มีการขยายสตริงย่อยการทดสอบ ทุบตี สำหรับพารามิเตอร์ที่ไม่ได้ตั้งค่าหรือเป็นโมฆะ การละเว้นผลลัพธ์ของลำไส้ใหญ่ในการทดสอบเฉพาะสำหรับพารามิเตอร์ที่ไม่ได้ตั้งค่า

ใช้ค่าเริ่มต้น ถ้า พารามิเตอร์ ถูก unset หรือ null การขยาย คำ จะถูกแทนที่ มิฉะนั้นค่าของ พารามิเตอร์ จะถูกแทนที่

กำหนดค่าเริ่มต้น ถ้า พารามิเตอร์ ถูก unset หรือ null การขยาย คำ จะถูกกำหนดให้กับ พารามิเตอร์ ค่าของ พารามิเตอร์ จะถูกแทนที่ พารามิเตอร์ตำแหน่งและพารามิเตอร์พิเศษอาจไม่ได้กำหนดให้ในลักษณะนี้

แสดง Error ถ้า Null หรือ Unset ถ้า พารามิเตอร์ เป็นโมฆะหรือไม่ได้ตั้งค่าการขยาย คำ (หรือข้อความไปยังเอฟเฟ็กต์นั้นหากไม่มี คำ ใด ๆ ) จะถูกเขียนลงในข้อผิดพลาดมาตรฐานและเชลล์ถ้าไม่มีการโต้ตอบออก มิฉะนั้นค่าของ พารามิเตอร์ จะถูกแทนที่

ใช้ค่าทดแทน ถ้า พารามิเตอร์ เป็น null หรือ unset ไม่มีอะไรถูกแทนที่มิฉะนั้นการขยาย คำ จะถูกแทนที่

ขยายไปยังชื่อของตัวแปรที่มีชื่อขึ้นต้นด้วย คำนำหน้า ซึ่งคั่นด้วยอักขระพิเศษของตัวแปรพิเศษ IFS

ความยาวตัวอักษรของค่าของ พารามิเตอร์ ถูกแทนที่ ถ้า พารามิเตอร์ เป็น * หรือ @ ค่าที่แทนคือจำนวนพารามิเตอร์ตำแหน่ง หาก พารามิเตอร์ เป็นชื่ออาร์เรย์ที่ subscripted โดย * หรือ @ ค่าที่แทนคือจำนวนองค์ประกอบในอาร์เรย์

คำ นี้ถูกขยายเพื่อสร้างรูปแบบเช่นเดียวกับการขยายพา ธ ชื่อ ถ้ารูปแบบตรงกับจุดเริ่มต้นของค่าของ พารามิเตอร์ ผลลัพธ์ของการขยายคือค่าที่ขยายขึ้นของ พารามิเตอร์ที่ มีรูปแบบการจับคู่ที่สั้นที่สุด (กรณี `` '') หรือรูปแบบการจับคู่ที่ยาวที่สุด (`` ## ' ') ลบแล้ว ถ้า พารามิเตอร์ เป็น @ หรือ * การดำเนินการกำจัดรูปแบบจะถูกนำไปใช้กับแต่ละพารามิเตอร์ตำแหน่งในทางกลับกันและการขยายเป็นรายการที่เกิดขึ้น ถ้า พารามิเตอร์ เป็นตัวแปรอาร์เรย์ที่มีการบีบอัดด้วย @ หรือ * การดำเนินการกำจัดรูปแบบจะถูกนำไปใช้กับสมาชิกแต่ละอาร์เรย์ในเลี้ยวและการขยายจะเป็นรายการผลลัพธ์

คำ นี้ถูกขยายเพื่อสร้างรูปแบบเช่นเดียวกับการขยายพา ธ ชื่อ หากรูปแบบตรงกับส่วนท้ายของค่าที่ขยายแล้วของ พารามิเตอร์ ผลลัพธ์ของการขยายคือค่าที่ขยายของ พารามิเตอร์ที่ มีรูปแบบการจับคู่ที่สั้นที่สุด (กรณี `` % '') หรือรูปแบบการจับคู่ที่ยาวที่สุด (`` % ลบ% 'กรณีแล้ว ถ้า พารามิเตอร์ เป็น @ หรือ * การดำเนินการกำจัดรูปแบบจะถูกนำไปใช้กับแต่ละพารามิเตอร์ตำแหน่งในทางกลับกันและการขยายเป็นรายการที่เกิดขึ้น ถ้า พารามิเตอร์ เป็นตัวแปรอาร์เรย์ที่มีการบีบอัดด้วย @ หรือ * การดำเนินการกำจัดรูปแบบจะถูกนำไปใช้กับสมาชิกแต่ละอาร์เรย์ในเลี้ยวและการขยายจะเป็นรายการผลลัพธ์

รูปแบบ ถูกขยายเพื่อสร้างรูปแบบเช่นเดียวกับการขยายพา ธ ชื่อ มีการขยาย พารามิเตอร์ และการจับคู่ที่ยาวที่สุดของ รูปแบบ กับค่าจะถูกแทนที่ด้วย สตริง ในรูปแบบแรกจะมีการเปลี่ยนการแข่งขันครั้งแรกเท่านั้น แบบฟอร์มที่สองทำให้การจับคู่ทั้งหมดของ รูปแบบ ถูกแทนที่ด้วย สตริง หาก รูปแบบ เริ่มต้นด้วย # จะต้องตรงกับจุดเริ่มต้นของค่าที่ขยายของ พารามิเตอร์ ถ้า รูปแบบ เริ่มต้นด้วย % จะต้องตรงกับตอนท้ายของค่าที่ขยายของ พารามิเตอร์ ถ้า สตริง เป็นโมฆะการจับคู่ของ รูปแบบ จะถูกลบออกและ รูปแบบ / ต่อไปนี้อาจถูกละเว้น ถ้า พารามิเตอร์ คือ @ หรือ * การดำเนินการแทนจะถูกใช้กับแต่ละพารามิเตอร์ตำแหน่งในทางกลับกันและการขยายเป็นรายการผลลัพธ์ ถ้า พารามิเตอร์ เป็นตัวแปรอาร์เรย์ subscripted ด้วย @ หรือ * การดำเนินการแทนจะถูกนำไปใช้กับสมาชิกแต่ละอาร์เรย์ในเลี้ยวและการขยายตัวเป็นรายการที่เกิดขึ้น

การทดแทนคำสั่ง

การแทนที่คำสั่ง จะช่วยให้ผลลัพธ์ของคำสั่งเพื่อแทนที่ชื่อคำสั่ง มีสองรูปแบบ:

$ ( คำสั่ง )

หรือ

` คำสั่ง `

Bash ดำเนินการขยายโดยการรัน คำสั่ง และแทนที่คำสั่งแทนด้วยเอาต์พุตมาตรฐานของคำสั่งโดยจะมีการลบบรรทัดใหม่ ๆ ที่ต่อท้าย บรรทัดใหม่ที่ฝังจะไม่ถูกลบ แต่อาจถูกนำออกในระหว่างการแยกคำ การทดแทนคำสั่ง $ (cat file ) สามารถแทนที่ได้ด้วยค่า $ (< file ) ที่เท่ากัน

เมื่อใช้แบบฟอร์ม backquote แบบเก่าในการทดแทนเครื่องหมายแบ็กสแลชจะมีความหมายตามตัวอักษรยกเว้นเมื่อตามด้วย $ , ` หรือ \ ข้อความหลังแรกที่ไม่มีเครื่องหมายทับขวาจะยกเลิกการแทนที่คำสั่ง เมื่อใช้แบบฟอร์ม $ ( command ) อักขระทั้งหมดระหว่างวงเล็บจะประกอบด้วยคำสั่ง; ไม่มีใครได้รับการปฏิบัติเป็นพิเศษ

การแทนที่คำสั่งอาจซ้อนกัน หากต้องการสร้างรังเมื่อใช้รูปแบบ backquoted ให้หลีกเลี่ยงการย้อนกลับด้านในด้วยเครื่องหมาย backslashes

หากการแทนที่เกิดขึ้นภายในเครื่องหมายคำพูดสองคำการแบ่งคำและการขยายเส้นทางจะไม่ทำในผลลัพธ์

การขยายตัวทางคณิตศาสตร์

การขยายตัวทางคณิตศาสตร์ช่วยให้สามารถประเมินการแสดงออกทางคณิตศาสตร์และการแทนที่ผลลัพท์ รูปแบบสำหรับการขยายตัวทางคณิตศาสตร์คือ:

$ (( นิพจน์ ))

นิพจน์ จะถือว่าเหมือนกับว่าอยู่ในเครื่องหมายคำพูดคู่ แต่คำพูดสองบรรทัดภายในวงเล็บไม่ได้รับการปฏิบัติพิเศษ โทเค็นทั้งหมดในนิพจน์จะได้รับการขยายตัวพารามิเตอร์การขยายสตริงการแทนที่คำสั่งและการลบข้อความ การแทนที่ค่าเลขคณิตอาจซ้อนกัน

การประเมินผลจะดำเนินการตามกฎที่ระบุไว้ด้านล่างภายใต้การประเมินผล ARITHMETIC ถ้า นิพจน์ ไม่ถูกต้อง bash จะ พิมพ์ข้อความแจ้งว่าล้มเหลวและไม่มีการแทนที่เกิดขึ้น

การทดแทนกระบวนการ

การทดแทนกระบวนการ ได้รับการสนับสนุนในระบบที่สนับสนุนชื่อ pipes ( FIFOs ) หรือ / dev / fd ใน การตั้งชื่อไฟล์ที่เปิดอยู่ ใช้รูปแบบของ <( รายการ ) หรือ > ( รายการ ) รายการ กระบวนการทำงานด้วยอินพุตหรือเอาต์พุตที่เชื่อมต่อกับ FIFO หรือไฟล์บางไฟล์ใน / dev / fd ชื่อของไฟล์นี้ถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังคำสั่งปัจจุบันอันเป็นผลมาจากการขยายตัว ถ้าใช้แบบฟอร์ม ( รายการ ) การเขียนลงในไฟล์จะมีการป้อนข้อมูลสำหรับ รายการ ถ้าใช้แบบฟอร์ม <( รายการ ) ไฟล์ที่ส่งผ่านเป็นอาร์กิวเมนต์ควรอ่านเพื่อให้ได้ผลลัพธ์ของ รายการ

เมื่อพร้อมใช้งานจะมีการแทนที่กระบวนการด้วยพร้อมกับการขยายตัวแปรและตัวแปรการแทนที่คำสั่งและการขยายตัวทางคณิตศาสตร์

การแยกคำ

เปลือกจะสแกนผลลัพธ์ของการขยายพารามิเตอร์การแทนที่คำสั่งและการขยายตัวทางคณิตศาสตร์ที่ไม่ได้เกิดขึ้นภายในเครื่องหมายคำพูดคู่สำหรับการ แบ่งคำ

เปลือกจะพิจารณาอักขระแต่ละตัวของ IFS เป็นตัวคั่นและแยกผลลัพธ์ของการขยายอื่น ๆ ออกเป็นคำในอักขระเหล่านี้ ถ้าไม่มีการตั้งค่า IFS หรือค่าของมันคือ ค่าดีฟอลต์อักขระ IFS แต่ละ ตัวจะทำหน้าที่คั่นคำ ถ้า IFS มีค่าอื่นนอกเหนือจากค่าดีฟอลต์ลำดับของช่องว่างของอักขระและ แท็บ จะถูกละเว้นในตอนต้นและตอนท้ายของคำตราบเท่าที่อักขระไวต์สเปซอยู่ในค่าของ IFS (อักขระ IFS whitespace) อักขระใดใน IFS ที่ไม่ใช่ช่องว่าง IFS พร้อมกับอักขระช่องว่าง IFS ที่ อยู่ติดกันคั่นด้วยฟิลด์ ลำดับตัวอักษร IFS whitespace ยังถือว่าเป็นตัวคั่น ถ้าค่าของ IFS เป็นโมฆะจะไม่มีการแยกคำ

อาร์กิวเมนต์ null หมด ( "" หรือ "" ) จะยังคงอยู่ อาร์กิวเมนต์ null ที่ไม่มีการอ้างเหตุผลที่ไม่ได้ถูกอ้างถึงซึ่งเป็นผลมาจากการขยายพารามิเตอร์ที่ไม่มีค่าจะถูกลบออก ถ้าพารามิเตอร์ที่ไม่มีค่าถูกขยายภายในเครื่องหมายคำพูดสองครั้งผลลัพธ์ของอาร์กิวเมนต์โมฆะจะถูกเก็บไว้

โปรดทราบว่าหากไม่มีการขยายตัวเกิดขึ้น

การขยายเส้นทาง

หลังจากแยกคำว่าเว้นแต่ว่าได้ตั้งค่าตัวเลือก -f ไว้แล้ว bash จะสแกนแต่ละคำสำหรับอักขระ * ,? , และ [ . หากอักขระตัวใดตัวหนึ่งปรากฏขึ้นคำนั้นจะถือว่าเป็น รูปแบบ และแทนที่ด้วยรายการเรียงตามตัวอักษรของชื่อไฟล์ที่ตรงกับรูปแบบ หากไม่พบชื่อไฟล์ที่ตรงกับตัวเลือก nullglob ของเชลล์ถูกปิดใช้งานคำนั้นจะไม่มีการเปลี่ยนแปลง หากมีการตั้งค่าตัวเลือก nullglob และไม่พบคำที่ตรงกันคำนี้จะถูกลบออก หากเปิดใช้งานตัวเลือกเชลล์ nocaseglob การจับคู่จะดำเนินการโดยไม่คำนึงถึงตัวอักษรและตัวเลข เมื่อใช้รูปแบบสำหรับการขยายเส้นทางพา ธ อักขระ ``. '' ที่จุดเริ่มต้นของชื่อหรือตามหลังเครื่องหมายทับจะต้องตรงอย่างชัดเจนเว้นแต่ว่าได้ตั้งค่าตัวเลือก shell dotglob ไว้ เมื่อจับคู่ชื่อพา ธ อักขระสแลชต้องตรงกันเสมอไป ในกรณีอื่น ๆ อักขระ ``. '' จะไม่ได้รับการปฏิบัติเป็นพิเศษ ดูคำอธิบายของ shopt ด้านล่างใน คำสั่ง SHELL BUILTIN COMMANDS เพื่อดูคำอธิบายของตัวเลือก shell nocaskeglob , nullglob และ dotglob

ตัวแปรเชลล์ GLOBIGNORE สามารถใช้เพื่อ จำกัด ชุดของชื่อไฟล์ที่ตรงกับ รูปแบบ ถ้า GLOBIGNORE ถูกตั้งค่าชื่อไฟล์ที่ตรงกับที่ตรงกับรูปแบบใดรูปแบบหนึ่งใน GLOBIGNORE จะถูกลบออกจากรายการที่ตรงกัน ชื่อไฟล์ ``. '' และ `` .. '' จะถูกละเลยเสมอแม้ว่า GLOBIGNORE จะถูกตั้งค่า อย่างไรก็ตามการตั้งค่า GLOBIGNORE มีผลต่อการเปิดใช้งานตัวเลือก dotglob shell ดังนั้นชื่อไฟล์อื่นทั้งหมดที่ขึ้นต้นด้วย ``. '' จะตรงกัน เพื่อให้ได้พฤติกรรมเดิมในการละเลยชื่อไฟล์ที่ขึ้นต้นด้วย ``. '' ให้ทำ ``. * '' หนึ่งใน GLOBIGNORE ตัวเลือก dotglob ถูกปิดใช้งานเมื่อไม่ได้ตั้งค่า GLOBIGNORE

การจับคู่รูปแบบ

อักขระใด ๆ ที่ปรากฏในรูปแบบอื่นนอกเหนือจากอักขระรูปแบบพิเศษที่อธิบายด้านล่างตรงกับตัวเอง อักขระ NUL อาจไม่เกิดขึ้นในรูปแบบ ต้องมีการระบุอักขระรูปแบบพิเศษหากต้องการให้ตรงกับตัวอักษร

อักขระรูปแบบพิเศษมีความหมายดังนี้:

* * * *

จับคู่สตริงใด ๆ รวมทั้งสตริงที่เป็นโมฆะ

?

ตรงกับอักขระเดี่ยว ๆ

[ ... ]

ตรงกับอักขระที่ล้อมรอบตัวใดตัวหนึ่ง คู่อักขระที่คั่นด้วยยัติภังค์หมายถึงการ แสดงออกในช่วง อักขระใด ๆ ที่เรียงกันระหว่างอักขระทั้งสองตัวนี้รวมถึงการใช้ลำดับการจัดเรียงและชุดอักขระของที่ตั้งปัจจุบันจะได้รับการจับคู่ ถ้าอักขระตัวแรกตาม [ คือ a ! หรือ ^ แล้วอักขระใด ๆ ที่ไม่ได้ใส่ไว้จะถูกจับคู่ ลำดับการเรียงลำดับของอักขระในนิพจน์ช่วงจะถูกกำหนดโดยโลแคลปัจจุบันและค่าของตัวแปรเชลล์ LC_COLLATE ถ้ามีการตั้งค่า A - อาจจับคู่ได้โดยการรวมอักขระดังกล่าวเป็นอักขระตัวแรกหรือตัวสุดท้ายในชุด A ] อาจจะจับคู่ได้ด้วยการใส่อักขระตัวแรกในชุด

ภายใน [ และ ] สามารถระบุ คลาสอักขระ ได้โดยใช้ไวยากรณ์ [: class :] ซึ่ง คลาส เป็นคลาสที่กำหนดไว้ในมาตรฐาน POSIX.2:

อัลฟาอัลฟา ascii blank cntrl หลักกราฟต่ำพิมพ์ punct พื้นที่บน xdigit คำ
คลาสอักขระตรงกับอักขระใด ๆ ที่เป็นของคลาสนั้น ชั้นอักขระ คำ ตรงกับตัวอักษรตัวเลขและอักขระ _

ภายใน [ และ ] สามารถระบุ คลาสความเท่าเทียมกัน โดยใช้ไวยากรณ์ [= c =] ซึ่งตรงกับอักขระทั้งหมดที่มีน้ำหนักการจัดเรียงเดียวกัน (ตามที่กำหนดโดยโลแคลปัจจุบัน) เป็นอักขระ c .

ภายใน [ และ ] ไวยากรณ์ [. สัญลักษณ์ ] จะ ตรงกับสัญลักษณ์ สัญลักษณ์ที่ใช้ ร่วมกัน

ถ้ามีการเปิดใช้งานตัวเลือกเชลล์ extglob โดยใช้ builtin shopt ระบบจะรู้จำรูปแบบการจับคู่รูปแบบขยายหลายแบบ ในรายละเอียดต่อไปนี้ รูปแบบรายการ คือรายการของรูปแบบหนึ่งรูปแบบหรือมากกว่าที่คั่นด้วยเครื่องหมาย | . รูปแบบคอมโพสิตอาจเกิดขึ้นโดยใช้รูปแบบย่อยต่อไปนี้อย่างน้อยหนึ่งรูปแบบ:

? ( รูปแบบรายการ )

ตรงกับศูนย์หรือหนึ่งรูปแบบของรูปแบบที่กำหนด

* ( รูปแบบรายการ )

ตรงกับศูนย์หรือมากกว่าที่เกิดขึ้นของรูปแบบที่กำหนด

+ ( รูปแบบรายการ )

ตรงกับรูปแบบที่กำหนดไว้อย่างน้อยหนึ่งรูปแบบ

@ ( รูปแบบรายการ )

ตรงกับรูปแบบที่กำหนดอย่างใดอย่างหนึ่ง

! ( รูปแบบรายการ )

ตรงกับทุกอย่างยกเว้นรูปแบบที่ระบุ

การลบคำแนะนำ

หลังจากการขยายก่อนหน้านี้จะมีการลบการเกิดขึ้นที่ไม่ได้อ้างถึงตัวอักษร \ , ' และ "ทั้งหมด ที่ไม่ได้เกิดจากการขยายด้านบน

การเปลี่ยนเส้นทาง

ก่อนที่คำสั่งจะถูกเรียกใช้อินพุตและเอาต์พุตของมันอาจถูก เปลี่ยนเส้นทาง โดยใช้สัญกรณ์พิเศษที่ถูกตีความโดยเปลือก การเปลี่ยนเส้นทางอาจถูกใช้เพื่อเปิดและปิดไฟล์สำหรับสภาพแวดล้อมการทำงานของเชลล์ปัจจุบัน ตัวดำเนินการเปลี่ยนเส้นทางต่อไปนี้อาจนำหน้าหรือปรากฏที่ใดก็ได้ภายใน คำสั่งง่ายๆ หรืออาจทำตาม คำสั่ง การเปลี่ยนเส้นทางจะดำเนินการตามลำดับที่ปรากฏจากซ้ายไปขวา

ในคำอธิบายต่อไปนี้ถ้าหมายเลขตัวอธิบายไฟล์ถูกละไว้และอักขระตัวแรกของตัวดำเนินการเปลี่ยนเส้นทางคือ < การเปลี่ยนเส้นทางหมายถึงอินพุตมาตรฐาน (ตัวบอกไฟล์ 0) ถ้าอักขระตัวแรกของผู้ดำเนินการเปลี่ยนเส้นทางคือ > การเปลี่ยนเส้นทางหมายถึงเอาต์พุตมาตรฐาน (ตัวบอกไฟล์ 1)

คำที่ใช้ตัวดำเนินการเปลี่ยนเส้นทางในคำอธิบายต่อไปนี้เว้นแต่จะมีการระบุไว้เป็นอย่างอื่นต้องอยู่ภายใต้การขยายวงเล็บการขยายตัวหนอนการขยายพารามิเตอร์การแทนคำสั่งการขยายตัวทางคณิตศาสตร์การลบคำอ้างการขยายเส้นทางและการแบ่งคำ ถ้ามีการขยายคำมากกว่าหนึ่งคำ bash จะ รายงานข้อผิดพลาด

โปรดทราบว่าลำดับการเปลี่ยนเส้นทางมีความสำคัญ ตัวอย่างเช่นคำสั่ง

ls > dirlist 2 > & 1

นำออกทั้งมาตรฐานและข้อผิดพลาดมาตรฐานไปยังไฟล์ dirlist ในขณะที่คำสั่ง

ls 2 > และ 1 > dirlist

ชี้นำเฉพาะเอาท์พุทมาตรฐานไปยังไฟล์ dirlist เนื่องจากข้อผิดพลาดมาตรฐานถูกทำสำเนาเป็นเอาท์พุทมาตรฐานก่อนที่ผลลัพธ์มาตรฐานจะถูกเปลี่ยนเส้นทางไปยัง dirlist

Bash จัดการชื่อไฟล์หลาย ๆ อย่างโดยเฉพาะเมื่อใช้ในการเปลี่ยนเส้นทางตามที่อธิบายไว้ในตารางต่อไปนี้:

/ dev / fd / fd

ถ้า fd เป็นจำนวนเต็มที่ถูกต้อง fd descriptor ไฟล์จะถูกทำซ้ำ

/ dev / stdin

ตัวบอกไฟล์ 0 ถูกทำซ้ำ

/ dev / stdout

ตัวบอกไฟล์ 1 ถูกทำสำเนา

/ dev / stderr

ตัวบอกไฟล์ 2 ถูกทำซ้ำ

/ dev / tcp / host / port

ถ้า โฮสต์ เป็นชื่อโฮสต์หรือที่อยู่อินเทอร์เน็ตที่ถูกต้องและ พอร์ต เป็นหมายเลขพอร์ตหรือชื่อเซอร์วิสที่เป็นจำนวนเต็ม bash จะพยายามเปิดการเชื่อมต่อ TCP กับซ็อกเก็ตที่สอดคล้องกัน

/ dev / udp / โฮสต์ / พอร์ต

ถ้า โฮสต์ เป็นชื่อโฮสต์หรือที่อยู่อินเทอร์เน็ตที่ถูกต้องและ พอร์ต เป็นหมายเลขพอร์ตหรือชื่อเซอร์วิสที่เป็นจำนวนเต็ม bash จะพยายามเปิดการเชื่อมต่อ UDP ไปยังซ็อกเก็ตที่สอดคล้องกัน

ความล้มเหลวในการเปิดหรือสร้างไฟล์ทำให้การเปลี่ยนเส้นทางล้มเหลว

การเปลี่ยนเส้นทางการป้อนข้อมูล

การเปลี่ยนเส้นทางของการป้อนข้อมูลทำให้เกิดไฟล์ที่ชื่อของผลลัพธ์จากการขยาย คำ ที่จะเปิดอ่านใน descriptor ไฟล์ n หรืออินพุตมาตรฐาน (descriptor ไฟล์ 0) ถ้าไม่มีการระบุ n

รูปแบบทั่วไปสำหรับการป้อนข้อมูลการเปลี่ยนเส้นทางคือ:

[ n ] < คำ

การเปลี่ยนเส้นทางเอาท์พุท

การเปลี่ยนเส้นทางของเอาท์พุททำให้ไฟล์ชื่อของผลลัพธ์จากการขยายตัวของ คำ ที่จะเปิดขึ้นสำหรับการเขียนใน descriptor ไฟล์ n หรือเอาต์พุตมาตรฐาน (descriptor ไฟล์ 1) ถ้าไม่มีการระบุ n หากไฟล์ไม่มีอยู่จะถูกสร้างขึ้น ถ้าไม่มีอยู่จะถูกตัดทอนให้เป็นศูนย์

รูปแบบทั่วไปสำหรับการเอาต์พุตการเปลี่ยนเส้นทางคือ:

[ n ] > word

ถ้าตัวดำเนินการเปลี่ยนเส้นทางคือ > และตัวเลือก noclobber ไปยัง ชุด builtin ถูกเปิดใช้งานการเปลี่ยนเส้นทางจะล้มเหลวถ้าแฟ้มที่ชื่อที่ได้จากการขยาย คำ มีอยู่และเป็นไฟล์ปกติ ถ้าตัวดำเนินการเปลี่ยนเส้นทางคือ > | หรือตัวดำเนินการเปลี่ยนเส้นทางคือ > และตัวเลือก noclobber ไปยังคำสั่ง builtin builtin ไม่ได้เปิดใช้งานการพยายามเปลี่ยนเส้นทางจะเกิดขึ้นแม้ว่าจะมีไฟล์ชื่อตาม คำ อยู่ก็ตาม

การนำเอาต์พุตที่เปลี่ยนเส้นทาง

การเปลี่ยนเส้นทางของเอาต์พุตในลักษณะนี้ทำให้ไฟล์ชื่อของผลลัพธ์จากการขยาย คำ จะถูกเปิดขึ้นมาเพื่อผนวกกับไฟล์ descriptor n หรือเอาต์พุตมาตรฐาน (descriptor ไฟล์ 1) ถ้าไม่มีการระบุ n หากไฟล์ไม่มีอยู่จะมีการสร้างขึ้น

รูปแบบทั่วไปสำหรับเอาท์พุทต่อท้ายคือ

[ n ] >> word

การเปลี่ยนเส้นทางเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐาน

Bash อนุญาตทั้งเอาท์พุทมาตรฐาน (descriptor ไฟล์ 1) และเอาต์พุตข้อผิดพลาดมาตรฐาน (descriptor ไฟล์ 2) ไปยังไฟล์ที่มีชื่อคือการขยายตัวของ คำ ด้วยโครงสร้างนี้

มีสองรูปแบบสำหรับการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐาน:

&> คำ

และ

> และ คำ

จากสองรูปแบบแรกเป็นที่ต้องการ นี่คือความหมายเทียบเท่ากับ

> word 2 > & 1

ที่นี่เอกสาร

การเปลี่ยนเส้นทางนี้แนะนำให้เปลือกอ่านข้อมูลจากแหล่งปัจจุบันจนกว่าจะมีสายที่มี คำ เฉพาะ (ไม่มีช่องว่างต่อท้าย) ทุกบรรทัดอ่านถึงจุดนั้นจะถูกใช้เป็นอินพุทมาตรฐานสำหรับคำสั่ง

รูปแบบของเอกสารที่นี่คือ:

<< [ - ] คำ ที่นี่ - เอกสาร ตัวคั่น

ไม่ใช้การขยายพารามิเตอร์การแทนที่คำสั่งการขยายตัวทางคณิตศาสตร์หรือการขยายพา ธ ไปที่ คำ หากมีการยกอักขระใดใน คำว่า ตัวคั่น คือผลลัพธ์ของการลบ คำพูด ใน คำ และบรรทัดในเอกสารที่นี่จะไม่ขยาย ถ้า คำ เป็น unquoted บรรทัดทั้งหมดของเอกสารที่นี่อยู่ภายใต้การขยายพารามิเตอร์แทนคำสั่งและการขยายตัวทางคณิตศาสตร์ ในกรณีหลังตัวอักษรลำดับ \ newline จะถูกละเลยและ \ ต้องใช้เพื่ออ้างตัวอักษร \ , $ และ `

ถ้าตัวดำเนินการเปลี่ยนเส้นทางเป็น << - แล้วตัวอักษรแท็บชั้นนำทั้งหมดจะถูกตัดออกจากบรรทัดอินพุตและบรรทัดที่ประกอบด้วย ตัวคั่น ซึ่งจะช่วยให้เอกสารที่อยู่ภายในสคริปต์ของเชลล์มีการเว้นไว้ตามแบบธรรมชาติ

ที่นี่ Strings

รูปแบบของเอกสารที่นี่มีรูปแบบดังนี้

<<< คำ

คำ นี้ถูกขยายและจัดให้อยู่ในคำสั่งบนอินพุตมาตรฐาน

ทำซ้ำคำอธิบายไฟล์

ผู้ดำเนินการเปลี่ยนเส้นทาง

[ n ] <& word

ถูกใช้เพื่อทำซ้ำ descriptors แฟ้มป้อนข้อมูล ถ้า คำ ขยายไปเป็นตัวเลขหนึ่งตัวหรือมากกว่าตัวบอกลักษณะไฟล์ที่แสดงด้วย n จะทำเป็นสำเนาคำอธิบายไฟล์นั้น ถ้าตัวเลขใน คำ ไม่ระบุ descriptor ไฟล์ที่เปิดสำหรับอินพุตเกิดข้อผิดพลาดในการเปลี่ยนเส้นทาง ถ้า คำว่า ประเมินเป็น - , descriptor ไฟล์ n ถูกปิด ถ้าไม่มีการระบุค่า n จะใช้อินพุตมาตรฐาน (descriptor ไฟล์ 0)

ผู้ดำเนินการ

[ n ] > และ คำ

จะใช้เหมือนกับตัวบอกซ์ไฟล์ที่ส่งออกซ้ำ ถ้าไม่มีการระบุค่า n จะใช้เอาต์พุตมาตรฐาน (descriptor ไฟล์ 1) ถ้าตัวเลขใน คำ ไม่ระบุคำอธิบายไฟล์ที่เปิดอยู่สำหรับเอาต์พุตข้อผิดพลาดในการเปลี่ยนเส้นทางเกิดขึ้น เป็นกรณีพิเศษถ้า n ถูกละไว้และ word ไม่ขยายไปยังตัวเลขอย่างน้อยหนึ่งตัวเลขเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานถูกเปลี่ยนเส้นทางตามที่อธิบายไว้ก่อนหน้านี้

การย้าย Descriptors ไฟล์

ผู้ดำเนินการเปลี่ยนเส้นทาง

[ n ] <& หลัก -

ย้ายตัวบ่งชี้ไฟล์ไปยังไฟล์ descriptor n หรืออินพุตมาตรฐาน (descriptor ไฟล์ 0) ถ้าไม่ได้กำหนด n ไว้ ตัวเลข ถูกปิดหลังจากถูกทำซ้ำเป็น n

ในทำนองเดียวกันผู้ดำเนินการเปลี่ยนเส้นทาง

[ n ] > หลัก -

ย้ายไฟล์ descriptor ของไฟล์ไปยังไฟล์ descriptor n หรือเอาต์พุตมาตรฐาน (descriptor ไฟล์ 1) ถ้าไม่มีการระบุ n

การเปิดไฟล์อธิบายสำหรับการอ่านและการเขียน

ผู้ดำเนินการเปลี่ยนเส้นทาง

[ n ] <> word

ทำให้ไฟล์ชื่อของเขาคือการขยายตัวของ คำ ที่จะเปิดทั้งอ่านและเขียนใน descriptor ไฟล์ n หรือใน descriptor ไฟล์ 0 ถ้า n ไม่ได้ระบุ หากไฟล์ไม่มีอยู่ไฟล์จะถูกสร้างขึ้น

นามแฝง

นามแฝง อนุญาตให้สตริงที่จะใช้แทนคำเมื่อใช้เป็นคำแรกของคำสั่งง่ายๆ เชลล์เก็บรายชื่อนามแฝงที่อาจถูกตั้งค่าและลบออกด้วยคำสั่ง นามแฝง และ unalias (ดูคำสั่ง SHELL BUILTIN ด้านล่าง) คำแรกของคำสั่งแต่ละคำถ้า unquoted ถูกตรวจสอบเพื่อดูว่ามีนามแฝงหรือไม่ ถ้าใช่คำนั้นจะถูกแทนที่ด้วยข้อความของนามแฝง ชื่อนามแฝงและข้อความแทนที่อาจมีการใส่ข้อมูลเชลล์ที่ถูกต้องรวมถึง metacharacters ที่ ระบุไว้ด้านบนยกเว้นว่าชื่อนามแฝงอาจไม่มี = คำแรกของข้อความทดแทนจะได้รับการทดสอบหานามแฝง แต่คำที่เหมือนกับนามแฝงที่กำลังขยายจะไม่ถูกขยายเป็นครั้งที่สอง ซึ่งหมายความว่าอาจมีนามแฝง ls ไปที่ ls -F ตัวอย่างเช่นและ bash ไม่พยายามที่จะขยายข้อความแทนที่แทน ถ้าอักขระตัวสุดท้ายของค่านามแฝงเป็นค่า ว่าง คำสั่งคำสั่งต่อไปนี้ตามนามแฝงจะถูกตรวจสอบว่ามีการขยายนามแฝงด้วย

นามแฝงถูกสร้างและแสดงด้วยคำสั่ง นามแฝง และลบออกด้วยคำสั่ง unalias

ไม่มีกลไกสำหรับใช้อาร์กิวเมนต์ในข้อความแทนที่ ถ้าต้องการอาร์กิวเมนต์ควรใช้ฟังก์ชันเปลือก (ดู ฟังก์ชัน ด้านล่าง)

นามสกุลจะไม่ถูกขยายเมื่อเปลือกไม่โต้ตอบจนกว่าจะมีการตั้งค่าตัวเลือกเชลล์ expand_aliases โดยใช้ shopt (ดูคำอธิบายของ shopt ภายใต้ SHELL BUILTIN COMMANDS ด้านล่าง)

กฎเกี่ยวกับการนิยามและการใช้นามแฝงค่อนข้างสับสน Bash จะอ่านบรรทัดข้อมูลทั้งหมดอย่างน้อยหนึ่งรายการก่อนที่จะดำเนินการคำสั่งใด ๆ ในบรรทัดนั้น นามสกุลจะถูกขยายเมื่อมีการอ่านคำสั่งไม่ใช่เมื่อรันคำสั่ง ดังนั้นนิยามนามแฝงที่ปรากฏบนบรรทัดเดียวกับคำสั่งอื่นจะไม่มีผลจนกระทั่งอ่านบรรทัดถัดไป คำสั่งต่อไปนี้ระบุนามแฝงในบรรทัดที่ไม่ได้รับผลกระทบจากนามแฝงใหม่ ลักษณะการทำงานนี้ยังเป็นปัญหาเมื่อมีการเรียกใช้ฟังก์ชัน นามสกุลจะถูกขยายเมื่ออ่านคำจำกัดความของฟังก์ชั่นไม่ใช่เมื่อฟังก์ชันถูกเรียกใช้เนื่องจากคำจำกัดความของฟังก์ชันเป็นคำสั่งผสม เป็นผลให้นามแฝงที่กำหนดไว้ในฟังก์ชันไม่สามารถใช้งานได้จนกว่าจะมีการดำเนินการฟังก์ชันนั้น เพื่อความปลอดภัยให้ใส่นิยามนามแฝงเสมอในบรรทัดที่แยกจากกันและอย่าใช้ นามแฝง ในคำสั่งผสม

สำหรับเกือบทุกวัตถุประสงค์แทนจะถูกแทนที่โดยฟังก์ชันเปลือก

ฟังก์ชั่น

ฟังก์ชันเชลล์ที่กำหนดไว้ตามที่อธิบายไว้ด้านบนใน SHELL GRAMMAR จัดเก็บชุดคำสั่งเพื่อดำเนินการในภายหลัง เมื่อชื่อของฟังก์ชันเชลล์ถูกใช้เป็นชื่อคำสั่งง่ายๆรายการของคำสั่งที่เชื่อมโยงกับชื่อฟังก์ชันนั้นจะถูกเรียกใช้งาน หน้าที่ถูกเรียกใช้ในบริบทของเชลล์ปัจจุบัน ไม่มีกระบวนการใหม่ที่สร้างขึ้นเพื่อตีความพวกเขา (ตรงกันข้ามนี้กับการดำเนินการของสคริปต์เชลล์) เมื่อฟังก์ชันถูกเรียกใช้อาร์กิวเมนต์ของฟังก์ชันจะกลายเป็นพารามิเตอร์ตำแหน่งในระหว่างการทำงาน พารามิเตอร์พิเศษ # ได้รับการอัปเดตเพื่อแสดงถึงการเปลี่ยนแปลง พารามิเตอร์ตำแหน่ง 0 ไม่มีการเปลี่ยนแปลง ตัวแปร FUNCNAME ถูกตั้งค่าเป็นชื่อของฟังก์ชันในขณะที่ฟังก์ชันกำลังรันอยู่ ด้านอื่น ๆ ทั้งหมดของสภาพแวดล้อมการทำงานของเชลล์เหมือนกันระหว่างฟังก์ชันกับผู้เรียกโดยยกเว้นว่า DEBUG trap (ดูคำอธิบายของ builtin trap ภายใต้ SHELL BUILTIN COMMANDS ด้านล่าง) จะไม่ได้รับการสืบทอดยกเว้นฟังก์ชันที่ได้รับค่า trace attribute ( ดูคำอธิบายของ builtin ที่ ประกาศไว้ ด้านล่าง)

ตัวแปรท้องถิ่นของฟังก์ชันอาจถูกประกาศด้วยคำสั่ง builtin ภายใน โดยปกติตัวแปรและค่าของพวกเขาจะถูกใช้ร่วมกันระหว่างฟังก์ชันและผู้โทร

ถ้าการดำเนินการคำสั่ง builtin ถูกเรียกใช้ในฟังก์ชันฟังก์ชันจะเสร็จสมบูรณ์และการดำเนินการดำเนินการต่อด้วยคำสั่งถัดไปหลังจากเรียกใช้ฟังก์ชัน เมื่อฟังก์ชันเสร็จสมบูรณ์ค่าของพารามิเตอร์ตำแหน่งและพารามิเตอร์พิเศษ # จะถูกคืนค่าไปเป็นค่าที่ได้รับก่อนการทำงานของฟังก์ชัน

ชื่อฟังก์ชันและคำจำกัดความอาจแสดงรายการด้วยตัวเลือก -f ในคำสั่ง declare หรือ typeset builtin ตัวเลือก -F เพื่อ ประกาศ หรือ ชุด จะแสดงเฉพาะชื่อฟังก์ชันเท่านั้น อาจมีการส่งออกฟังก์ชันเพื่อให้มีการกำหนดเฟรมย่อยไว้โดยอัตโนมัติด้วยตัวเลือก -f ไปยังชุดควบคุมการ ส่งออก

หน้าที่อาจเป็น recursive ไม่ จำกัด จำนวนครั้งที่เรียกซ้ำ

การประเมินผลทางพันธุกรรม (ARITHMETIC EVALUATION)

เปลือกช่วยให้การคำนวณทางคณิตศาสตร์สามารถประเมินได้ภายใต้สถานการณ์บางอย่าง (ดูคำสั่งในการสร้างและ การขยายตัวเลขคณิต ) การประเมินผลจะทำในจำนวนเต็มความกว้างคงที่โดยไม่มีการตรวจสอบการไหลล้นแม้ว่าการหารด้วย 0 จะถูกขังอยู่และถูกตั้งค่าสถานะเป็นข้อผิดพลาด ตัวดำเนินการและลำดับความสำคัญและการเชื่อมโยงของพวกเขาจะเหมือนกับในภาษาซี รายชื่อผู้ประกอบการต่อไปนี้ถูกจัดกลุ่มเป็นระดับของโอเปอเรเตอร์ที่มีลำดับความสำคัญเท่ากัน ระดับจะแสดงตามลำดับความสำคัญที่ลดลง

id + + id -

โพสต์ที่เพิ่มขึ้นและโพสต์ลดลง

+ + id - id

ตัวแปร pre-increment และ pre-decrement

- +

บวกลบและบวก

! ~

ตรรกะและการลบบิต

**

การยกกำลัง

* /%

การคูณหารที่เหลือ

+ -

บวกลบ

<< >>

ซ้ายและขวาเลื่อนบิต

<=> = <>

การเปรียบเทียบ

==! =

ความเสมอภาคและความเสมอภาค

&

บิตและ

^

bitwise OR หรือ

|

bitwise OR

&&

ตรรกะ AND

||

ตรรกะ OR

expr ? expr : expr

การประเมินผลตามเงื่อนไข

= * = / =% = + = - = << = >> = & = ^ = | =

การมอบหมาย

expr1 , expr2

จุลภาค

ตัวแปรเชลล์ได้รับอนุญาตให้เป็นตัวถูกดำเนินการ การขยายพารามิเตอร์จะดำเนินการก่อนที่นิพจน์จะได้รับการประเมิน ภายในนิพจน์ตัวแปรเชลล์อาจมีการอ้างอิงด้วยชื่อโดยไม่ใช้ไวยากรณ์การขยายพารามิเตอร์ ค่าของตัวแปรถูกประเมินเป็นนิพจน์เลขคณิตเมื่อมีการอ้างถึง ตัวแปรเชลล์ไม่จำเป็นต้องเปิดใช้แอตทริบิวต์จำนวนเต็มเพื่อใช้ในนิพจน์

ค่าคงที่ที่มีเครื่องหมาย 0 จะถูกแปลเป็นตัวเลขฐานแปด ชั้นนำ 0x หรือ 0X หมายถึงเลขฐานสิบหก มิฉะนั้นตัวเลขจะมีรูปแบบ [ ฐาน # ] n โดยที่ ฐาน เป็นตัวเลขทศนิยมระหว่าง 2 ถึง 64 แทนฐานเลขคณิตและ n คือตัวเลขในฐานนั้น ถ้า ฐาน # ถูกละไว้ฐาน 10 จะถูกใช้ ตัวเลขที่มากกว่า 9 จะแสดงด้วยอักษรตัวพิมพ์เล็กตัวอักษรตัวพิมพ์ใหญ่ @ และ _ ในลำดับดังกล่าว หาก ฐาน มีค่าน้อยกว่าหรือเท่ากับ 36 ตัวอักษรตัวพิมพ์เล็กและตัวพิมพ์ใหญ่อาจใช้แทนกันเพื่อแสดงตัวเลขระหว่าง 10 ถึง 35 ได้

ผู้ให้บริการได้รับการประเมินตามลำดับความสำคัญ การแสดงออกย่อยในวงเล็บจะได้รับการประเมินก่อนและอาจมีการแทนที่คำแนะนำข้างต้นข้างต้น

การแสดงออกที่มีเงื่อนไข

นิพจน์เงื่อนไขจะใช้คำสั่ง compound [ คำสั่งผสมและคำสั่ง ทดสอบ และ [ builtin] เพื่อทดสอบแอตทริบิวต์ของไฟล์และทำการเปรียบเทียบสตริงและเลขคณิต นิพจน์จะถูกสร้างขึ้นจากพรรคการเมืองเอกหรือพรรครีพับลิ ถ้าอาร์กิวเมนต์ ไฟล์ หนึ่งใน primaries อยู่ในรูปแบบ / dev / fd / n ให้เลือก descriptor ไฟล์ n ถ้าอาร์กิวเมนต์ของ ไฟล์ เป็นหนึ่งใน / dev / stdin , / dev / stdout หรือ / dev / stderr จะมีการทำเครื่องหมายเลือก ไฟล์ 0, 1 หรือ 2 ตามลำดับ

- ไฟล์

จริงถ้า แฟ้ม มีอยู่

-b ไฟล์

จริงถ้า ไฟล์นั้น มีอยู่และเป็นไฟล์พิเศษสำหรับบล็อก

ไฟล์ -c

จริงถ้า ไฟล์ มีอยู่และเป็นไฟล์พิเศษของอักขระ

ไฟล์ -d

จริงถ้า แฟ้ม มีอยู่และเป็นไดเรกทอรี

ไฟล์ e

จริงถ้า แฟ้ม มีอยู่

-f ไฟล์

จริงถ้า แฟ้ม มีอยู่และเป็นไฟล์ปกติ

-G ไฟล์

จริงถ้า แฟ้ม มีอยู่และเป็นชุด - id กลุ่ม

-h ไฟล์

จริงถ้า แฟ้ม มีอยู่และเป็นลิงค์สัญลักษณ์

ไฟล์ -k

จริงถ้า แฟ้ม มีอยู่และบิต `` เหนียว 'ถูกตั้งค่า

-p ไฟล์

จริงถ้ามี ไฟล์ อยู่และเป็นท่อที่มีชื่อ (FIFO)

-r ไฟล์

จริงถ้า ไฟล์ มีอยู่และสามารถอ่านได้

ไฟล์

จริงถ้า ไฟล์ มีอยู่และมีขนาดใหญ่กว่าศูนย์

-t fd

จริงถ้าตัวอธิบายไฟล์ fd เปิดอยู่และหมายถึงเทอร์มินัล

ไฟล์ -u

จริงถ้า ไฟล์ มีอยู่และตั้งบิตผู้ใช้ id ถูกตั้งค่าไว้

ไฟล์ -w

จริงถ้า ไฟล์ มีอยู่และสามารถเขียนได้

ไฟล์ x

จริงถ้า แฟ้ม มีอยู่และเป็นปฏิบัติการได้

-O

จริงถ้า แฟ้ม มีอยู่และเป็นเจ้าของโดย id ผู้ใช้ที่มีประสิทธิภาพ

ไฟล์ -G

จริงถ้ามี ไฟล์ อยู่และเป็นของ id กลุ่มที่มีประสิทธิภาพ

ไฟล์ -L

จริงถ้า แฟ้ม มีอยู่และเป็นลิงค์สัญลักษณ์

ไฟล์ -S

จริงถ้า แฟ้ม มีอยู่และเป็นซ็อกเก็ต

ไฟล์ -N

จริงถ้า แฟ้ม มีอยู่และได้รับการแก้ไขตั้งแต่ครั้งล่าสุดที่อ่าน

file1 - ไฟล์ nt2

จริงถ้า file1 ใหม่ (ตามวันที่แก้ไข) กว่า file2 หรือถ้า file1 มีอยู่และ file2 ไม่

file1 - ot file2

จริงถ้า file1 เก่ากว่า file2 หรือถ้า file2 มีอยู่และ file1 ไม่

file1 -ef file2

จริงถ้า file1 และ file2 อ้างถึงอุปกรณ์และหมายเลข inode เดียวกัน

-o optname

จริงถ้าตัวเลือกเชลล์ optname ถูกเปิดใช้งาน ดูรายการตัวเลือกภายใต้คำอธิบายของตัวเลือก -o ไปยัง ชุดคำสั่งที่ตั้งไว้ ด้านล่าง

-z สตริง

จริงถ้าความยาวของ สตริง เป็นศูนย์

-n string

เชือก

จริงถ้าความยาวของ สตริง ไม่เป็นศูนย์

string1 == string2

จริงถ้าสตริงเท่ากัน = สามารถใช้แทน == สำหรับการปฏิบัติตามอย่างเคร่งครัด POSIX

string1 ! = string2

จริงถ้าสตริงไม่เท่ากัน

string1 < string2

จริงถ้า string1 เรียงลำดับก่อน string2 lexicographically ในสถานที่ปัจจุบัน

string1 > string2

จริงถ้า string1 เรียงตาม string2 lexicographically ในโลแคลปัจจุบัน

arg1 OP arg2

OP เป็นหนึ่งใน -eq , -ne , -lt , -le , -gt หรือ -ge ตัวดำเนินการแบบไบนารีเลขคณิตเหล่านี้จะเป็นค่าจริงถ้า arg1 มีค่าเท่ากับไม่น้อยกว่าหรือน้อยกว่าหรือมากกว่าหรือมากกว่าหรือเท่ากับ arg2 ตามลำดับ Arg1 และ arg2 อาจเป็นจำนวนเต็มบวกหรือลบ

การขยายคำสั่งอย่างง่าย

เมื่อดำเนินการคำสั่งแบบง่ายๆเปลือกจะทำการขยายการกำหนดและการเปลี่ยนเส้นทางต่อไปนี้จากซ้ายไปขวา

1. คำที่เครื่องแยกวิเคราะห์ได้ทำเครื่องหมายไว้เป็นตัวแปรที่ได้รับมอบหมาย (ก่อนหน้าชื่อคำสั่ง) และการเปลี่ยนเส้นทางจะถูกบันทึกไว้สำหรับการประมวลผลในภายหลัง

2. มีการขยายคำที่ไม่ใช่การกำหนดตัวแปรหรือการเปลี่ยนเส้นทาง ถ้าคำใด ๆ ยังคงอยู่หลังขยายคำแรกจะถูกใช้เป็นชื่อของคำสั่งและคำที่เหลือจะเป็นอาร์กิวเมนต์

3. การดำเนินการดังกล่าวจะดำเนินการตามที่ได้อธิบายไว้ข้างต้นภายใต้ REDIRECTION

4. ข้อความหลังจากที่ = ในการกำหนดตัวแปรแต่ละตัวผ่านการขยายตัวหนอนการขยายพารามิเตอร์การแทนที่คำสั่งการขยายตัวทางคณิตศาสตร์และการลบข้อความก่อนที่จะถูกกำหนดให้กับตัวแปร

ถ้าไม่มีผลลัพธ์ของชื่อคำสั่งการกำหนดตัวแปรจะมีผลต่อสภาพแวดล้อมของเชลล์ปัจจุบัน มิฉะนั้นตัวแปรจะถูกเพิ่มลงในสภาวะแวดล้อมของคำสั่งที่ดำเนินการและไม่ส่งผลต่อสภาพแวดล้อมของเชลล์ปัจจุบัน ถ้ามีการมอบหมายใด ๆ พยายามกำหนดค่าให้กับตัวแปรแบบอ่านอย่างเดียวเกิดข้อผิดพลาดขึ้นและคำสั่งออกจากที่มีสถานะอื่นที่ไม่ใช่ศูนย์

หากไม่มีผลชื่อคำสั่งการเปลี่ยนเส้นทางจะดำเนินการ แต่ไม่ส่งผลต่อสภาพแวดล้อมของเชลล์ปัจจุบัน เกิดข้อผิดพลาดในการเปลี่ยนเส้นทางทำให้คำสั่งจบการทำงานด้วยสถานะที่ไม่ใช่ศูนย์

หากมีชื่อคำสั่งที่เหลืออยู่หลังจากการขยายตัวการดำเนินการดำเนินการตามที่อธิบายไว้ด้านล่าง มิฉะนั้นคำสั่งจะออก ถ้าหนึ่งในการขยายมีการแทนที่คำสั่งสถานะการออกจากคำสั่งคือสถานะการออกจากการแทนที่คำสั่งครั้งสุดท้าย ถ้าไม่มีการแทนที่คำสั่งคำสั่งจะออกพร้อมกับสถานะเป็นศูนย์

การปฏิบัติตามคำสั่ง

หลังจากคำสั่งถูกแยกออกเป็นคำถ้าผลลัพธ์เป็นคำสั่งง่ายๆและรายการอาร์กิวเมนต์ที่ไม่จำเป็นจะมีการดำเนินการต่อไปนี้

ถ้าชื่อคำสั่งไม่มีเครื่องหมายทับ (slashes) เปลือกจะพยายามหาตำแหน่งดังกล่าว ถ้ามีฟังก์ชั่นเชลล์ตามชื่อนั้นฟังก์ชั่นดังกล่าวถูกเรียกใช้ตามที่อธิบายไว้ข้างต้นใน FUNCTIONS ถ้าชื่อไม่ตรงกับฟังก์ชั่นเชลล์จะค้นหาในรายการของ builtins ของเชลล์ ถ้ามีการจับคู่พบว่ามีการเรียกใช้อินทรีนั้น

ถ้าชื่อไม่ได้เป็นฟังก์ชันเชลล์หรือ builtin และไม่มี slashes ให้ ทุบตี ค้นหาองค์ประกอบแต่ละส่วนของ เส้นทาง สำหรับไดเรกทอรีที่มีไฟล์ที่เรียกใช้งานได้ตามชื่อนั้น Bash ใช้ตารางแฮชเพื่อจดจำ pathnames เต็มรูปแบบของไฟล์ปฏิบัติการ (ดูที่ hash ภายใต้ SHELL BUILTIN COMMANDS ด้านล่าง) ค้นหาแบบเต็มของไดเรกทอรีใน เส้นทาง จะดำเนินการเฉพาะเมื่อไม่พบคำสั่งในตารางแฮช หากการค้นหาล้มเหลวเชลล์จะพิมพ์ข้อความแสดงข้อผิดพลาดและส่งกลับสถานะการออกจาก 127

ถ้าการค้นหาสำเร็จหรือถ้าชื่อคำสั่งมี slashes อย่างน้อยหนึ่งตัวเชลล์จะรันโปรแกรมที่มีชื่อในสภาวะแวดล้อมการทำงานที่แยกต่างหาก อาร์กิวเมนต์ 0 ถูกตั้งค่าเป็นชื่อที่ระบุและอาร์กิวเมนต์ที่เหลืออยู่ในคำสั่งจะถูกตั้งค่าเป็นอาร์กิวเมนต์ที่กำหนดถ้ามี

ถ้าการดำเนินการนี้ล้มเหลวเนื่องจากไฟล์ไม่อยู่ในรูปแบบที่ปฏิบัติการได้และไฟล์ไม่ใช่ไดเร็กทอรีจะถือว่าเป็น เชลล์สคริปต์ ไฟล์ที่มีคำสั่งเชลล์ subshell จะถูกเรียกใช้เพื่อดำเนินการดังกล่าว เปลือกย่อยนี้จะเริ่มต้นใหม่เพื่อให้ผลกระทบเหมือนกับว่ามีการเรียกใช้เชลล์ใหม่เพื่อจัดการกับสคริปต์ยกเว้นว่าตำแหน่งของคำสั่งที่ผู้ปกครองจำได้ (ดูที่ด้านล่างใต้ SHELL BUILTIN COMMANDS ) จะถูกเก็บรักษาไว้โดยเด็ก

ถ้าโปรแกรมเป็นไฟล์ที่ขึ้นต้นด้วย #! ส่วนที่เหลือของบรรทัดแรกระบุล่ามสำหรับโปรแกรม เปลือกรันล่ามที่ระบุในระบบปฏิบัติการที่ไม่ได้จัดการกับรูปแบบที่ปฏิบัติการนี้เอง อาร์กิวเมนต์สำหรับล่ามประกอบด้วยอาร์กิวเมนต์ตัวเลือกหนึ่งตัวตามชื่อล่ามในบรรทัดแรกของโปรแกรมตามด้วยชื่อของโปรแกรมตามด้วยอาร์กิวเมนต์คำสั่งหากมี

สภาพแวดล้อมในการดำเนินการคำสั่ง

เปลือกมี สภาพแวดล้อมการดำเนินการ ซึ่งประกอบด้วยต่อไปนี้:

* เปิดไฟล์ที่สืบทอดมาจากเชลล์ที่ invocation ตามที่ได้รับการแก้ไขโดย redirections ที่จัดมาให้กับ exec builtin

* ไดเรกทอรีการทำงานปัจจุบันตามที่กำหนดโดย cd , pushd หรือ popd หรือสืบทอดมาจากเปลือกโดยใช้คำร้องขอ

* โหมดการสร้างไฟล์โหมดมาสก์ที่กำหนดโดย umask หรือสืบทอดมาจาก parent ของ shell

* กับดักปัจจุบันกับ ดัก

* พารามิเตอร์เปลือกที่กำหนดโดยการกำหนดตัวแปรหรือมีการ ตั้งค่า หรือสืบทอดมาจากผู้ปกครองของเชลล์ในสภาพแวดล้อม

* ฟังก์ชันเปลือกที่กำหนดไว้ในระหว่างการดำเนินการหรือสืบทอดมาจากผู้ปกครองของเชลล์ในสภาพแวดล้อม

* ตัวเลือกเปิดใช้งานที่การภาวนา (ไม่ว่าจะเป็นค่าดีฟอลต์หรืออาร์กิวเมนต์บรรทัดคำสั่ง) หรือตาม ชุด

* ตัวเลือกที่เปิดใช้งานโดย shopt

* นามแฝงเปลือกกำหนดด้วย นามแฝง

* รหัสกระบวนการต่างๆรวมถึงงานพื้นหลังมูลค่า $$ และมูลค่า $ PPID

เมื่อมีการใช้คำสั่งง่ายๆนอกเหนือจากฟังก์ชัน builtin หรือ shell จะถูกเรียกใช้ในสภาวะแวดล้อมการดำเนินการที่แยกต่างหากซึ่งประกอบด้วยข้อมูลต่อไปนี้ ค่าที่สืบทอดมาจากเปลือก

* ไฟล์ที่เปิดอยู่ของ shell รวมทั้งการแก้ไขและการเพิ่มเติมใด ๆ ที่กำหนดโดยการเปลี่ยนเส้นทางไปยังคำสั่ง

* ไดเรกทอรีการทำงานปัจจุบัน

* โหมดการสร้างไฟล์โหมด

ตัวแปรเปลือก * ทำเครื่องหมายสำหรับการส่งออกพร้อมกับตัวแปรที่ส่งออกสำหรับคำสั่งส่งผ่านในสภาพแวดล้อม

* กับดักที่ถูกจับโดยเปลือกจะถูกรีเซ็ตเป็นค่าที่สืบทอดมาจาก parent ของ parent และ traps ถูกละเว้นโดย shell ถูกละเลย

คำสั่งที่เรียกใช้ในสภาพแวดล้อมที่แยกต่างหากนี้จะไม่สามารถส่งผลต่อสภาพแวดล้อมการดำเนินการของเชลล์ได้

การแทนที่คำสั่งและคำสั่งแบบอะซิงโครนัสจะถูกเรียกใช้ในสภาพแวดล้อมแบบย่อยที่ซ้ำซ้อนกับสภาพแวดล้อมของเชลล์ยกเว้นว่ากับดักที่จับโดยเชลล์จะถูกรีเซ็ตเป็นค่าที่เชลล์สืบทอดมาจากพาเรนต์ที่รีเซต คำสั่ง Builtin ที่เรียกใช้เป็นส่วนหนึ่งของท่อจะถูกเรียกใช้ในสภาพแวดล้อมแบบย่อย การเปลี่ยนแปลงที่เกิดกับสิ่งแวดล้อมย่อยจะไม่ส่งผลกระทบต่อสภาพแวดล้อมการทำงานของเชลล์

ถ้าคำสั่งตามด้วย & และการควบคุมงานไม่ทำงานคำสั่งมาตรฐานมาตรฐานสำหรับคำสั่งคือไฟล์เปล่า / dev / null มิฉะนั้นคำสั่ง invoked สืบทอด descriptor ไฟล์ของเชลล์การโทรตามที่ได้รับการแก้ไขโดย redirections