Sintaxe desconhecida em /etc/rc.d/init.d/functions

1

Olhando o arquivo /etc/rc.d/init.d/functions , vejo que o seguinte está declarando um número de variáveis como variáveis locais. No entanto, por que as variáveis killlevel e pid_file têm um sinal de igual depois delas?

killproc() {
        local RC killlevel= base pid pid_file= delay try

Eu também estou vendo as seguintes sintaxes ... Alguma idéia para que ${1##*/} ou ${2:-} bits são?

base=${1##*/}
...
__pids_var_run() {
        local base=${1##*/}
        local pid_file=${2:-/var/run/$base.pid}
    
por user192702 26.01.2014 / 06:35

1 resposta

2

Eles são conhecidos como expansão de parâmetro, que é a sintaxe avançada do script do Shell

  1. ${2:-/var/run/$base.pid} é um exemplo de

    ${VAR :-default }
    

    Isso resultará em $VAR , a menos que VAR seja indefinido ou nulo, caso em que resultará em padrão. Em determinado script, se ${2} não estiver definido, o valor padrão /var/run/$base.pid será usado

  2. base=${1##*/} é um exemplo de

    ${var#Pattern}

    Você pode remover $var conforme o padrão fornecido na frente de $var se f=/etc/resolv.conf , echo ${f#/etc/} removerá /etc/ parte e obterá apenas um nome de arquivo

ATUALIZAÇÃO:

f=/etc/httpd/httpd.conf
# This will return etc/httpd/httpd.conf
echo ${f#*/}  
# This will return httpd.conf
echo ${f##*/}

O único # é não-ganancioso, enquanto o dobro # é a abordagem gananciosa da expressão correspondente.

    
por 26.01.2014 / 07:24