setเป็น shell builtinใช้สำหรับตั้งค่าและยกเลิกการตั้งค่าตัวเลือกเชลล์และพารามิเตอร์ตำแหน่ง
โดยไม่ต้องมีปากเสียงsetจะพิมพ์ตัวแปรเปลือกทั้งหมด (ทั้งตัวแปรสภาพแวดล้อมและตัวแปรในเซสชั่นปัจจุบัน) เรียงลำดับในปัจจุบันสถานที่เกิดเหตุ
นอกจากนี้คุณยังสามารถอ่านเอกสารทุบตี
มีข้อแม้อยู่เล็กน้อย
set "$var"จะกำหนดค่าให้กับvar $1หาก$varเริ่มต้นด้วย-หรือเนื้อหา+นั้น$varจะถือว่าเป็นลำดับของตัวเลือกเชลล์ หาก$varมีตัวเลือกที่ไม่ถูกต้องเชลล์ POSIX ส่วนใหญ่จะพิมพ์ข้อผิดพลาด yashและzshในsh, kshการแข่งขันไม่เพียง แต่พิมพ์ผิดพลาด แต่ยังตั้งค่าตัวเลือกที่ถูกต้อง ในขณะที่yashหยุดการตั้งค่าตัวเลือกในตัวเลือกที่ไม่ถูกต้องตัวแรกzshจะกำหนดตัวเลือกทั้งหมด ในyash:
var=-fxd; set "$var"
fและxจะนำเสนอใน$-ขณะที่:
var=fdx; set "$var"
เพียง แต่อยู่ในปัจจุบันf $-ในทั้งสองกรณีfและxจะนำเสนอ$-ด้วยzshในshและkshจำลอง
เพื่อป้องกันคุณจากสถานการณ์นั้นคุณสามารถส่งผ่าน--เป็นอาร์กิวเมนต์แรกเพื่อตั้งค่าพารามิเตอร์ตำแหน่งแม้เริ่มต้นด้วย-หรือ+:
var=-fdx; set -- "$var"
จะมอบหมาย$varให้$1โดยไม่คำนึงถึงเนื้อหา
set -- จะไม่มีการตั้งค่าพารามิเตอร์ตำแหน่งทั้งหมด
ถ้าอาร์กิวเมนต์แรกคือ-พฤติกรรมที่ไม่ได้ระบุ POSIX เชลล์ที่รู้จักทั้งหมดจะถูกยกเลิกการตั้งค่าxและvตัวเลือก (ยกเว้นposh) และกำหนดสิ่งใด ๆ หลังจาก-พารามิเตอร์ตำแหน่ง:
set -xv - -f
จะกำหนดไป-f ยังไม่ได้ล้างพารามิเตอร์ตำแหน่ง Schily oshก็ทำตัวเช่นนั้น มรดกสืบทอดไม่ได้ตั้งค่าและตัวเลือก$1set -vx
ข้อยกเว้นของ POSIX เชลล์เท่านั้นคือyashซึ่งถือว่า-เป็นพารามิเตอร์ตำแหน่งแรก:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schilyยังไม่ทำอะไรเลยถ้า-มีข้อโต้แย้ง:
$ schily-sh -c 'set -v - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
<blank line>
s
$ schily-sh -c 'set -v -- -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
-f
vs