O que echo $ -1 exibe?

14

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

Em uma das minhas caixas Linux, ele me mostra:

echo $-1
imsBEl1
echo $-2
imsBEl2

E em outra caixa do Linux, mostra:

echo $-1
himBH1
echo $-2
himBH2

Eles estão mapeando para alguns locais de memória ou alguma outra coisa?

iGnite007
fonte
1
O título está exibindo o seguinte problema na barra lateral: meta.stackexchange.com/q/229363/205964
IQAndreas
Eu adicionei uma edição proposta que tentou corrigi-lo, mas logo percebi que é apenas a barra lateral que renderiza o MathJax, o que significa que, quando o título está nesta página, ele obtém barras invertidas desnecessárias.
IQAndreas 30/10

Respostas:

19

POSIX definiu $ - como:

-

(Hífen.) Expande para os sinalizadores de opção atuais (os nomes das opções de letra única concatenados em uma sequência de caracteres) conforme especificado na chamada, pelo comando interno especial set, ou implicitamente pelo shell.

Portanto, $-pode haver uma base diferente no seu shell ou como você o chama.

1ou 2são um token separado aqui. Quando o shell $vir aspas , ele identificará o início de qualquer candidato para expansão de parâmetro, substituição de comando ou expansão aritmética. Viu$- e expandiu, deixando o resto inalterado.

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

cuonglm
fonte
18

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

Franco de Miroslav
fonte
11

Acrescentando à resposta de Miroslav:

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

Isso significa que essas 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 parafraseando menor.

-Eu

Se a opção -i estiver presente, o shell será interativo.

-m

Modo de monitor. O controle do trabalho está ativado.

-B

O shell realiza a expansão de chaves ( consulte Expansão de chaves) ). Isso está ativado por padrão.

-s

Se a opção -s estiver presente ou se nenhum argumento permanecer após o processamento da opção, os comandos serão lidos a partir da entrada padrão. Esta opção permite que os parâmetros posicionais sejam definidos ao chamar um shell interativo.

-E

errtrace

-eu

Faça o bash agir como se tivesse sido chamado como um shell de login

-h

hashall

-H Expansão da história

Esse recurso é ativado por padrão para shells interativos.

Aaron Hall
fonte
3

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

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
l0b0
fonte