Por que você transformou MYPARAMS
em uma string e não em array? Como MYPARAMS
é uma string como --checklist "" 15 40 5 "foo1" " " off
, a linha de comando whiptail $MYPARAMS
do shell resulta em whiptail
sendo chamado com os argumentos --checklist
, ""
(uma string que consiste em duas aspas duplas), 15
, 40
, 5
, "foo1"
, "
, "
e off
. Quando você deixa uma expansão variável sem aspas, seu valor é dividido em campos em cada seqüência de espaço em branco, e os campos resultantes são tratados como padrões de caractere curinga que são expandidos se corresponderem a qualquer arquivo. Aspas pertencem à sintaxe do shell, elas são apenas expandidas pelo analisador do shell, não como parte da expansão da variável.
Você pode invocar o analisador de shell com o eval
builtin, mas é difícil obter a cotação correta. Seria especialmente difícil se os itens pudessem conter caracteres que não se encaixam na sintaxe da shell.
Uma matriz é o caminho certo para armazenar uma lista de strings. Supondo que você tenha definido com sucesso MYARRAY
para a lista de tags que deseja usar, é possível fazer o loop dessa matriz para criar a matriz de parâmetros.
MYPARAMS=()
for t in "${MYARRAY[@]}"; do
MYPARAMS+=("$t" " " "off")
done
whiptail "${MYPARAMS[@]}"