Significado de um hífen como um parâmetro especial?

5

De link ,

- (A hyphen.) Expands to the current option flags as specified upon invocation, by the set builtin command, or those set by the shell itself (such as the -i option).

Não tenho certeza do que diz. Você pode dar alguns exemplos para o significado de um parâmetro de hífen?

    
por Tim 06.12.2015 / 02:22

2 respostas

8

Você pode echo $- ver as opções de shell ativadas no momento:

$ echo $-
himBH

Essas são opções que você pode fornecer com uma chamada - on shell - bash -h -B - ou mais tarde usando set .

Os sinalizadores são definidos em a documentação para set . Minhas opções acima são:

  • -h Locate and remember (hash) commands as they are looked up for execution. This option is enabled by default.
  • -m Job control is enabled (see Job Control). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status.
  • -B The shell will perform brace expansion (see Brace Expansion). This option is on by default.
  • -H Enable ‘!’ style history substitution (see History Interaction). This option is on by default for interactive shells.

e i para um shell interativo .

Se eu alterar as opções ativas, digamos com set -x , receberei um novo valor de $- :

$ set -x +h
$ echo $-
imxBH
    
por 06.12.2015 / 02:37
4

Depende - como uma expansão de sinal de dólar, $- se expande para uma lista das opções de uma única letra da tabelaset do shell atual - como -x e -f e -C . Por exemplo, um shell interativo expandirá pelo menos como:

echo "$-"
i

As versões mais longas, set -o option podem ser obtidas com set +o.

Mas há outro tipo de parâmetro especial de hífen que é uma espécie de analógico para isso. Você pode usar dois hífens consecutivos para sinalizar o fim das opções na lista de argumentos de um comando típico, mas você também pode usar um single-hypen para fazer o mesmo com um POSIX-shell. Historicamente, os shells aceitavam um hífen único para significar o mesmo.

Um bash shell interpreta um único hífen especialmente em contextos de lista de argumentos. Com set , por exemplo, marca o final das opções e desativa -v erbose e -x trace. Além disso, set - não não apaga uma lista de parâmetros se for o primeiro e único argumento para set as set -- .

Um shell de login muitas vezes acrescenta um - ao seu argv[0] .

    
por 06.12.2015 / 02:47

Tags