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?


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.


18

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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.