Existe algum perigo em usar uma variável não definida em uma definição de função bash?

3

Fazendo algumas refatorações de código, e percebi que não sei se isso é importante:

A definição da função será originada de outro arquivo (uma espécie de biblioteca). A função usa certas variáveis dentro do corpo da função. Essas variáveis serão definidas no momento em que a função é realmente chamada no script, mas será muito mais limpa se eu puder criar a biblioteca de funções no início do script ; no entanto, as variáveis não estão definidas neste ponto.

Existe alguma desvantagem em fazer isso? Até onde sei, o bash não fará nada com uma definição de função até ser chamado ... certo? Nesse caso, as variáveis não definidas usadas dentro da função não terão importância, uma vez que essas variáveis conterão os valores corretos posteriormente, antes que a função seja realmente chamada .

Ou isso vai atrapalhar as coisas para incluir variáveis tão distantes em uma definição de função?

    
por Wildcard 16.11.2015 / 21:34

1 resposta

4
fn(){ printf %s\n "${v-not set}"; }
v=value; fn; unset v; fn
value
not set

Uma função shell é uma string literal armazenada na memória do shell. Na definição de tempo, ele é analisado, mas não é avaliado para expansões (além de aliases de shell) ou redirecionamentos. Estes são avaliados apenas no tempo de chamada .

De fato, e um tanto relacionado, desta forma é possível obter uma função para definir sua própria entrada com um novo arquivo temporário em cada chamada.

fn(){ ls -l /dev/fd/0; cat; } <<INFILE
$@
INFILE
fn some args; fn other args
#in dash
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:50 /dev/fd/0 -> pipe:[4076148]
some args
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:50 /dev/fd/0 -> pipe:[4077081]
other args
#bash
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:51 /dev/fd/0 -> /tmp/sh-thd-1036060995 (deleted)
some args
lr-x------ 1 mikeserv mikeserv 64 Nov 16 12:51 /dev/fd/0 -> /tmp/sh-thd-531856742 (deleted)
other args
    
por 16.11.2015 / 21:46