Estou escrevendo algo como o seguinte script. Não funciona como esperado porque a função deleteCEfromCeLst
tem que chamar um script especificando para ele um parâmetro "void" através da spawnPrg
função , mas se eu especificar nos parâmetros da spawnPrg
função o parâmetro "void" ''
, que eu uso quando chamo o script $HOME/execsh/delete.sh
diretamente no prompt, esse parâmetro "void" resulta (corretamente) como nada e não como um parâmetro não especificado.
O uso da spawnPrg
função é obrigatório porque ela será utilizada a partir de outras funções chamadas do fluxo "principal" ou diretamente pelo fluxo principal, além disso a função spawnPrg
deverá conter comportamentos que atuem para registrar algo como um arquivo de log.
#!/bin/bash
spawnPrg()
{
echo $@
$@ &
return
}
deleteCEfromCeLst()
{
local d
cat ce.lst | while read d; do
spawnPrg $HOME/execsh/delete.sh $1 '' $d
done
return
}
deleteCEfromCeLst
exit
Tentei também codificar deleteCEfromCeLst
como:
deleteCEfromCeLst()
{
local d
cat ce.lst | while read d; do
spawnPrg "$HOME/execsh/delete.sh $1 '' $d"
done
return
}
Com o código acima o resultado é que a função spawnPrg é executada conforme é enviada para o prompt como:
$HOME/execsh/delete.sh $1 \'\' $d
onde o parâmetro "void" é especificado como a string ''
que significa que o segundo parâmetro enviado ao delete.sh
script não é um parâmetro "void".
Cite as expansões variáveis.
Se tivermos um script
foo.sh
:E chamamos com
sh foo.sh ""
, a saída é:Ou seja, um argumento vazio de
"$1"
(o argumento parafoo.sh
), outro do codificado""
no script e, em seguida, a string fixafoo
.Se qualquer um
$@
ou$1
tivesse sido sem aspas, os valores vazios em questão desapareceriam como parte da divisão de palavras.Ver: