Поскольку ваш ответ в порядке и вы можете принять его, давайте сделаем его лучше.
Следующее:
string="-e string"
eval "echo $string"
будет печатать только string
без -e
, поскольку -e
интерпретируется как аргумент эха.
Что еще хуже, строки типа string='; rm -rf /'
будут выполнять команду rm и стирать ваш жесткий диск. Лучшим и идиоматическим подходом было бы правильно избежать printf
:
eval "printf '%s' \"$string\""
@ редактировать
Перечитав ваш вопрос, я думаю, вы просто ищете:
string="--optionA hello --optionB `seq 1 2 10` --optionC `printf "happy %.0s" {1..3}`"
или как обратные пометки `устарели:
string="--optionA hello --optionB $(seq 1 2 10) --optionC $(printf "happy %.0s" {1..3})"
Использование var=$(echo ....)
в большинстве случаев аналогично var="..."
.