set
adalah shell builtin , digunakan untuk opsi shell dan set unset dan parameter posisi.
Tanpa argumen, set
akan mencetak semua variabel shell (variabel lingkungan dan variabel dalam sesi saat ini) diurutkan dalam lokal saat ini .
Anda juga dapat membaca dokumentasi bash .
Ada beberapa peringatan.
set "$var"
akan memberikan var
nilai $1
. Jika $var
mulai dengan -
atau +
, maka $var
konten diperlakukan sebagai urutan opsi shell. Jika $var
berisi opsi yang tidak valid, sebagian besar shell POSIX akan mencetak kesalahan. yash
dan zsh
di sh
, ksh
emulasi tidak hanya mencetak kesalahan, tetapi juga pilihan pengaturan valid. Sementara yash
berhenti mengatur opsi pada opsi tidak valid pertama, zsh
akan menetapkan semuanya. Dalam yash
:
var=-fxd; set "$var"
f
dan x
akan hadir $-
, sementara:
var=fdx; set "$var"
hanya f
hadir di $-
. Dalam kedua kasus, f
dan x
akan hadir di $-
dengan zsh
di sh
dan ksh
emulasi.
Untuk melindungi Anda dari situasi itu, Anda dapat memberikan --
argumen pertama untuk menetapkan parameter posisi meskipun diawali dengan -
atau +
:
var=-fdx; set -- "$var"
akan ditugaskan $var
untuk $1
, terlepas dari kontennya.
set --
tanpa argumen lebih lanjut akan membatalkan semua parameter posisi.
Jika argumen pertama adalah -
, perilaku tersebut tidak ditentukan. Semua shell POSIX yang dikenal akan di-unset x
dan v
opsi (kecuali posh
), dan menetapkan apa pun setelah -
parameter posisi:
set -xv - -f
akan ditugaskan -f
untuk $1
. set -
juga tidak menghapus parameter posisi. Schily osh juga berperilaku seperti itu. Pusaka sh jangan disetel v
dan x
opsi.
Satu-satunya pengecualian shell POSIX adalah yash
, yang memperlakukan -
sebagai parameter posisi pertama:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schily bahkan tidak melakukan apa pun jika -
ada dalam argumen:
$ 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