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ก็ทำตัวเช่นนั้น มรดกสืบทอดไม่ได้ตั้งค่าและตัวเลือก$1
set -
v
x
ข้อยกเว้นของ 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