set- це вбудована оболонка , яка використовується для встановлення та зняття параметрів оболонки та позиційних параметрів.
Без аргументів setбуде надруковано всі змінні оболонки (як змінні середовища, так і змінні в поточному сеансі), відсортовані за поточним мовою .
Ви також можете прочитати документацію bash .
Є кілька застережень.
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до $1. set -також не скидав позиційні параметри. Шилі ош теж поводиться так. Реліквія sh не знімає 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-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