seté um shell embutido , usado para definir e desmarcar opções de shell e parâmetros posicionais.
Sem argumentos, setimprimirá todas as variáveis do shell (variáveis de ambiente e variáveis na sessão atual) classificadas no código do idioma atual .
Você também pode ler a documentação do bash .
Há algumas ressalvas.
set "$var"atribuirá varvalor a $1. Se $variniciar com -ou +, o $varconteúdo será tratado como sequências de opções de shell. Se $varhouver opções inválidas, a maioria dos shells POSIX imprimirá o erro. yashe zshem sh, a kshemulação não está apenas imprimindo o erro, mas também configurando opções válidas. Enquanto yashparar de definir opções na primeira opção inválida, zshatribuirá todas elas. Em yash:
var=-fxd; set "$var"
fe xapresentará em $-, enquanto:
var=fdx; set "$var"
fpresente apenas em $-. Em ambos os casos, fe xapresentará em $-com zshem she kshemulação.
Para protegê-lo dessa situação, você pode passar --como o primeiro argumento para definir o parâmetro posicional, mesmo que comece com -ou +:
var=-fdx; set -- "$var"
será atribuído $vara $1, independentemente do seu conteúdo.
set -- sem mais argumentos, todos os parâmetros posicionais serão desativados.
Se o primeiro argumento for -, o comportamento não é especificado. Todos os shells POSIX conhecidos serão desmarcados xe vopções (exceto posh), e atribuirão qualquer coisa a seguir -a parâmetros posicionais:
set -xv - -f
atribuirá -fa $1. set -também não desabilitou os parâmetros posicionais. Schily osh também se comporta assim. A herança não desativa ve as xopções.
A única exceção de shell POSIX é yash, que trata -como o primeiro parâmetro posicional:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schily nem faz nada se estiver -presente nos argumentos:
$ 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