set
là một nội dung shell , được sử dụng cho các tùy chọn shell set và unset và các tham số vị trí.
Không có đối số, set
sẽ in tất cả các biến shell (cả biến môi trường và biến trong phiên hiện tại) được sắp xếp theo ngôn ngữ hiện tại .
Bạn cũng có thể đọc tài liệu bash .
Có một vài cảnh báo.
set "$var"
sẽ gán var
giá trị cho $1
. Nếu $var
bắt đầu bằng -
hoặc +
, thì $var
nội dung được coi là chuỗi các tùy chọn shell. Nếu $var
chứa bất kỳ tùy chọn không hợp lệ, hầu hết các vỏ POSIX sẽ in lỗi. yash
và zsh
trong sh
, ksh
mô phỏng không chỉ in lỗi, mà còn thiết lập các tùy chọn hợp lệ. Trong khi yash
dừng cài đặt tùy chọn trên tùy chọn không hợp lệ đầu tiên, zsh
sẽ chỉ định tất cả chúng. Trong yash
:
var=-fxd; set "$var"
f
và x
sẽ trình bày trong $-
, trong khi:
var=fdx; set "$var"
chỉ f
trong hiện tại $-
. Trong cả hai trường hợp, f
và x
sẽ trình bày trong $-
với zsh
trong sh
và ksh
thi đua.
Để bảo vệ bạn khỏi tình huống đó, bạn có thể chuyển --
làm đối số đầu tiên để đặt tham số vị trí ngay cả khi nó bắt đầu bằng -
hoặc +
:
var=-fdx; set -- "$var"
sẽ gán $var
cho $1
, bất kể nội dung của nó.
set --
không có bất kỳ đối số nào nữa sẽ bỏ đặt tất cả các tham số vị trí.
Nếu đối số đầu tiên là -
, hành vi là không xác định. Tất cả các vỏ POSIX đã biết sẽ bỏ đặt x
và v
các tùy chọn (ngoại trừ posh
) và gán bất cứ thứ gì sau -
cho các tham số vị trí:
set -xv - -f
sẽ giao -f
cho $1
. set -
cũng không bỏ đặt tham số vị trí. Schily osh cũng cư xử như vậy. Gia truyền sh không bỏ đặt v
và x
lựa chọn.
Ngoại lệ vỏ POSIX duy nhất là yash
, được coi -
là tham số vị trí đầu tiên:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schily sh thậm chí không làm gì nếu -
có mặt trong các đối số:
$ 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