Благодаря хедз-апу от @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
}
# This function right here
function addUserArguments {
while (($#)); do
PARAMS+=("$1")
shift
done
}
addParam "mode" "$mode"
addParam "status" "$status"
addParam "name" "$name"
addParam "description" "$description"
addParam "extra" "$extra"
# And this line right here
eval addUserArguments $arguments
./test "${PARAMS[@]}"
И результат будет
--mode
good
--status
okay
--name
bro
--description
very good man dood
--config
blablabla=yes
--config2
bla2=no problem
Используйте массив, а не строковую переменную:
#!/bin/bash
mode="good"
status="okay"
name="bro"
description="very good man dood"
extra=""
# ----
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"
echo ./test "${PARAMS[@]}"
./test "${PARAMS[@]}"
Testing
$ ./other.sh
./test --mode good --status okay --name bro --description very good man dood
--mode
good
--status
okay
--name
bro
--description
very good man dood