Veja a edição abaixo, obrigado
Eu tenho o seguinte script de teste ( nota importante: não posso alterar esta parte ):
while (($#)); do
echo $1
shift
done
Executando o comando
%código%
fornece a seguinte saída:
aaa
bbbb cccc
ddd
que é o que qualquer pessoa sensata esperaria.
Eu tenho outro script:
mode="good"
status="okay"
name="bro"
description="very good man dood"
extra=""
# ----
PARAMS=""
// $1: key, $2: value
function addParam {
if [ ! -z "$2" ]; then
PARAMS="$PARAMS --$1 \"$2\""
fi
}
addParam "mode" "$mode"
addParam "status" "$status"
addParam "name" "$name"
addParam "description" "$description"
addParam "extra" "$extra"
echo ./test $PARAMS
./test $PARAMS
A saída de ./test aaa "bbbb cccc" ddd
é echo
, então eu esperaria que a saída de ./test --mode "good" --status "okay" --name "bro" --description "very good man dood"
fosse
--mode
good
--status
okay
--name
bro
--description
very good man dood
mas, por algum motivo, recebo a seguinte saída:
--mode
"good"
--status
"okay"
--name
"bro"
--description
"very
good
man
dood"
Se eu copiar a saída de ./test $PARAMS
e colá-la, obtenho a saída esperada de echo ./test $PARAMS
. Então tentei remover a última linha que executa ./test
e deixar a última linha ./test
, mas aparentemente echo
ainda não funciona e estou além das idéias.
O que estou fazendo de errado?
Editar: a solução da steeldriver funciona, mas há outra constelação - eu tenho que permitir que os usuários enviem seus próprios argumentos.
Então, com este script (obrigado @steeldriver):
#!/bin/bash
mode="good"
status="okay"
name="bro"
description="very good man dood"
extra=""
arguments="--config \"blablabla=yes\" --config2 \"bla2=no problem\""
# ----
declare -a PARAMS
# $1: key, $2: value
function addParam {
if [ ! -z "$2" ]; then
PARAMS+=("--$1" "$2")
fi
}
addParam "mode" "$mode"
addParam "status" "$status"
addParam "name" "$name"
addParam "description" "$description"
addParam "extra" "$extra"
# (1)
PARAMS+=("$arguments")
# (2)
PARAMS+=($arguments)
echo ./test "${PARAMS[@]}"
./test "${PARAMS[@]}"
A saída desejada é:
--mode
good
--status
okay
--name
bro
--description
very good man dood
--config
blablabla=yes
--config2
bla2=no problem
No entanto, a saída que recebo é:
com $(./script)
:
--mode
good
--status
okay
--name
bro
--description
very good man dood
--config "blablabla=yes" --config2 "bla2=no problem"
com (1)
:
--mode
good
--status
okay
--name
bro
--description
very good man dood
--config
"blablabla=yes"
--config2
"bla2=no
problem"
Muito apreciado!