O que o echo $ -1 exibe?

14

O que a saída de echo $-1 , echo $-2 , echo $-3 .. significa?

Em uma das minhas caixas do Linux, mostra-me:

echo $-1
imsBEl1
echo $-2
imsBEl2

E em outra caixa do Linux, mostra:

echo $-1
himBH1
echo $-2
himBH2

Eles estão mapeando alguns locais de memória ou algo mais?

    
por iGnite007 30.10.2014 / 02:27

4 respostas

19

POSIX definido $ - como:

-

(Hyphen.) Expands to the current option flags (the single-letter option names concatenated into a string) as specified on invocation, by the set special built-in command, or implicitly by the shell.

Então, $- pode ser diferente em seu shell ou como você o invoca.

1 ou 2 são token separados aqui. Quando o shell exibir unquote $ , ele identificará o início de qualquer candidato para expansão de parâmetro, substituição de comando ou expansão aritmética. Ele viu $- e expandiu-o, deixando o restante inalterado.

Você pode ver a seção Reconhecimento de tokens para obter mais detalhes.

    
por 30.10.2014 / 02:38
18

echo $- imprime opções do shell atual (sem - prefixo). 1 e 2 são outros tokens não relacionados.

    
por 30.10.2014 / 02:28
11

Adicionando a resposta de Miroslav:

echo $- prints options of the current shell (without - prefix). 1 and 2 are additional unrelated tokens.

Isso significa que estas são as opções para cada máquina, respectivamente.

imsBEl
himBH

Eu pesquisei o significado de cada bandeira e compilei os significados abaixo, com pequenas paráfrases.

-i

If the -i option is present, the shell is interactive.

-m

Monitor mode. Job control is enabled.

-B

The shell performs brace expansion (see Brace Expansion). This is on by default.

-s

If the -s option is present, or if no arguments remain after option processing, then commands are read from the standard input. This option allows the positional parameters to be set when invoking an interactive shell.

-E

errtrace

-l

Make bash act as if it had been invoked as a login shell

-h

hashall

-H History Expansion

This feature is enabled by default for interactive shells.

    
por 30.10.2014 / 15:47
3

Para expandir as respostas existentes, tente echo "${-1}" e echo "${-2}" - você receberá um erro "Substituição incorreta" porque em vez de usar -1 como nome de variável, o hífen é usado para substituir um valor se o nome da variável anterior é indefinido. Por exemplo:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
    
por 30.10.2014 / 09:12