Por que há um número na expansão do parâmetro zsh $ {1- $ PWD}

6

Eu tenho esse script do qual estou baseando meu script atual. Eu simplesmente não entendo porque ele tem typeset result part dir=${1-$PWD} lá.

Eu obtenho o mesmo resultado se eu apenas escrever dir=$PWD . Com o conjunto de tipos, ${1-$PWD} está mudando como dir está definido vs $PWD ?

    
por ZeroPhase 27.10.2017 / 18:08

3 respostas

6

${1-$PWD} é um padrão de expansão de parâmetros do shell.

É usado para expandir para um valor padrão baseado em outro - o que quer que esteja à direita de - . Aqui, no seu caso:

  • Se $1 não estiver definido, a expansão de $PWD será substituída

  • Caso contrário, se $1 for definido como qualquer valor (incluindo nulo), seu valor será usado como resultado da expansão

Exemplo:

% echo "Foo${1-$PWD}"   
Foo/home/bar

% set -- Spam

% echo "Foo${1-$PWD}"
FooSpam
    
por 27.10.2017 / 18:24
7

Isso não é a expansão de chave, que é um operador de expansão de parâmetro padrão (remonta ao shell Bourne nos anos 70).

${1-$PWD}

Expande para o valor de $1 (o primeiro parâmetro posicional) se estiver definido (se $# for estritamente maior que 0) até mesmo para a sequência vazia ou para o conteúdo da variável $PWD caso contrário.

Executar:

info zsh 'Parameter Expansion'

para detalhes.

typeset não é Bourne nem POSIX, mas também não é zsh específico. Ele vem do shell Korn (do início dos anos 80) e é usado para limitar o escopo de uma variável para a função atual. Também é encontrado em bash e yash .

Executar:

info zsh typeset

para detalhes.

    
por 27.10.2017 / 18:22
4

Ele testa $1 para um valor, usando isso antes de $PWD .

    
por 27.10.2017 / 18:08