จะรู้ได้อย่างไรว่าเปิดใช้งาน extglob ในเซสชัน bash ปัจจุบันหรือไม่?


10

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


2
โปรดทราบว่าไม่จำเป็นต้องตรวจสอบจนกว่าคุณจะสงสัย หากคุณต้องการมันในเพียงแค่เรียกใช้หรือหากคุณต้องการมันออกวิ่งshopt -s extglob shopt -u extglobมันไม่ได้สร้างความแตกต่าง แต่อย่างใดถ้ามันเป็นในตอนแรกหรือไม่
terdon

คำตอบ:


16

เพิ่งรัน:

$ shopt extglob

มันจะกลับสถานะปัจจุบัน:

$ shopt extglob 
extglob         on
$ shopt -u extglob 
$ shopt extglob 
extglob         off

หากต้องการแสดงตัวเลือกทั้งหมดให้เรียกใช้:

$ shopt

หนึ่งนี้ยังสามารถใช้สำหรับการเขียนสคริปต์สถานะการส่งคืนของมันยังระบุตัวเลือกการตั้งค่าหรือยกเลิกการตั้งค่า แต่ข้อความจะเลอะมาตรฐาน
cuonglm

12

ใช้shopt -q :

shopt -q extglob && echo enable || echo disable

-qตัวเลือกให้shoptยกเลิกเอาต์พุตและส่งคืนสถานะเพื่อระบุว่าตัวเลือกตั้งค่าหรือไม่ได้ตั้งค่า

โปรดทราบว่าshoptเฉพาะรายงานตัวเลือกที่สามารถปรากฏในBASHOPTSตัวแปรตัวเลือกเหล่านั้นไม่สามารถใช้ได้กับsetคำสั่ง builtin

ในการตรวจสอบตัวเลือกที่ใช้ได้setหรืออาจปรากฏในSHELLOPTSให้ใช้shopt -qo:

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable

2
ทำไมไม่เพียงshopt extglob?
terdon

1
เพราะผมไม่ต้องการออกไปรับประทานอาหารออกมาตรฐานของฉัน :)
cuonglm

คุณหมายถึงอะไร เท่าที่ฉันสามารถบอกได้ OP ต้องการตรวจสอบว่ามีการตั้งค่าตัวเลือกหรือไม่ พวกเขาพูดถึงว่ามันอยู่ใน terminal ดังนั้นฉันสงสัยว่ามันเป็นส่วนหนึ่งของสคริปต์ และแตกต่างกันอย่างไร ทั้งshopt extglobวิธีการของคุณจะเขียนถึง stdout คุณกำลังคิดshopt -q extglob && shopt -u extglob || shopt -s extglob?
terdon

@terdon: ดีวิธีการของฉันเพียงเขียนไป stdout ถ้าฉันต้องการ shopt -q extglob && : Code when enable || : Code when disableวิธีการทั่วไปคือ
cuonglm

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

6

มีสองรายการตัวเลือกในทุบตี หนึ่งสำหรับและหนึ่งสำหรับshoptset

ตัวเลือกextglobเป็นของshoptรายการ
ค่าของมันอาจจะพิมพ์โดยใช้อย่างใดอย่างหนึ่งหรือshopt extglobshopt -p extglob

ตัวเลือกที่nounsetเป็นของsetรายการ
ค่าของมันอาจจะพิมพ์โดยใช้หรือshopt -op nounsetshopt -o nounset

เลือกหนึ่งตัวเลือก

หากต้องการพิมพ์ตัวเลือกเฉพาะ (โดยไม่มีการเปลี่ยนแปลง) สำหรับ shopt ให้ใช้shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

และสำหรับการsetใช้: shopt -po name(ใช่คุณอาจใช้shopt -opสำหรับsetรายการ)

$  shopt -po xtrace
set +o xtrace

ตัวเลือกรายการ

เพื่อแสดงรายการตัวเลือกทั้งหมดจาก shopt ใช้shopt(หรือนำมาใช้ใหม่shopt -p)
นอกจากนี้ยังมีshopt -sหรือshopt -uสามารถนำมาใช้

วิธีที่จะแสดงรายการตัวเลือกทั้งหมดที่จะsetอยู่กับset -o(ที่เกี่ยวข้องset +o)
หรือ: shopt -oเทียบเท่ากับset -oและคือการshopt -opset +o

คู่มือ

จากLESS=+/'^ *shopt \[' man bash:

หากไม่มีตัวเลือกหรือด้วยตัวเลือก -p รายการของตัวเลือกที่ตั้งค่าได้ทั้งหมดจะปรากฏขึ้นหากใช้ -s หรือ -u โดยไม่มีอาร์กิวเมนต์ optname หน้าจอจะ จำกัด ตัวเลือกเหล่านั้นที่ตั้งค่าไว้หรือไม่ได้ตั้งค่าตามลำดับ

จากLESS=+/'^ *set \[' man bash:

หาก -o มาพร้อมกับไม่มีชื่อตัวเลือกค่าของตัวเลือกปัจจุบันจะถูกพิมพ์ หาก + o ไม่มีตัวเลือกชื่อชุดคำสั่งชุดเพื่อสร้างการตั้งค่าตัวเลือกปัจจุบันจะปรากฏบนเอาต์พุตมาตรฐาน

ตัวอย่าง

$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

และ

$  shopt -sp
shopt -s checkwinsize
shopt -s cmdhist
shopt -s expand_aliases
shopt -s extglob
shopt -s extquote
shopt -s force_fignore
shopt -s histappend
shopt -s histverify
shopt -s interactive_comments
shopt -s progcomp
shopt -s promptvars
shopt -s sourcepath

เป็นมูลค่าการกล่าวขวัญเกี่ยวกับshopt -opรายการsetตัวเลือกที่จริง:

$ shopt -op
set +o allexport
set -o braceexpand
set -o emacs
set +o errexit
set +o errtrace
set +o functrace
set -o hashall
set -o histexpand
set -o history
set +o ignoreeof
set -o interactive-comments
set +o keyword
set -o monitor
set +o noclobber
set +o noexec
set +o noglob
set +o nolog
set +o notify
set +o nounset
set +o onecmd
set +o physical
set +o pipefail
set +o posix
set +o privileged
set +o verbose
set +o vi
set +o xtrace
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.