O que significa '-' na saída de 'declare -p'?

0
$ declare -p ar
declare -a ar='()'


$ declare -p mmm
declare -- mmm="hello"

O que significa -- aqui? Diz algum atributo de mmm ?

Obrigado.

    
por Tim 25.07.2017 / 04:23

3 respostas

2

Está lá apenas pela consistência do formato de saída; o primeiro campo é o literal declare ; o segundo campo é a lista de atributos; o terceiro campo é o var=value .

Portanto, para uma variável sem atributos específicos, o comando precisa ter uma maneira de mostrar "sem atributos"; isso é feito com --

por exemplo

bash-4.2$ declare y=100
bash-4.2$ declare -p y
declare -- y="100"
bash-4.2$ declare -l y
bash-4.2$ declare -p y
declare -l y="100"
bash-4.2$ declare +l y
bash-4.2$ declare -p y
declare -- y="100"

O resultado pode ser armazenado em um arquivo e originado posteriormente.

    
por 25.07.2017 / 04:33
1

O traço duplo -- declara o final das opções para o comando fornecido. Você encontrará uma descrição muito inteligente cuonglm seguindo este link .

O exemplo dado mostra como grep para o valor -v assim:

grep -- -v inputFile

Portanto, -v não ativa a opção --invert-match, mas solicita a string -v dentro do inputFile.

    
por 25.07.2017 / 09:01
1

-- marca o final das opções. É supérfluo aqui (já que o nome da variável não começa com - (exceto nos casos patológicos em que a localidade do usuário seria definida com - na classe de caracteres alpha ) e, de qualquer forma, não é adicionado quando há bandeiras), mas inofensivo. Eu suponho que está lá porque o código tinha:

printf ("declare -%s ", i ? flags : "-");

Qual foi mais rápido para digitar do que:

if (i)
  printf ("declare -%s ", i ? flags : "-");
else
  printf ("declare ");

Ironicamente, em bash-2.01 , esse código foi alterado para:

if (pattr == 0 || posixly_correct == 0)
  printf ("declare -%s ", i ? flags : "-");
else if (i)
  printf ("%s -%s ", this_command_name, flags);
else
  printf ("%s ", this_command_name);

Para ser reutilizado para export e readonly , em que esse tempo o -- foi evitado para export var=value , mas não declare -- var=value .

    
por 25.07.2017 / 20:09

Tags