String Bash:如何计算这个字符串?

String Bash:如何计算这个字符串?,string,bash,echo,eval,evaluation,String,Bash,Echo,Eval,Evaluation,如果我写 echo --optionA hello --optionB `seq 1 2 10` --optionC `printf "happy %.0s" {1..3}` 它被评估为 --optionA hello --optionB 1 3 5 7 9 --optionC happy happy happy 这是所需的字符串,我最终可以使用 desiredString=$(echo --optionA hello --optionB `seq 1 2 10` --optionC `pr

如果我写

echo --optionA hello --optionB `seq 1 2 10` --optionC `printf "happy %.0s" {1..3}`
它被评估为

--optionA hello --optionB 1 3 5 7 9 --optionC happy happy happy
这是所需的字符串,我最终可以使用

desiredString=$(echo --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}`'
那么,如何获得所需的字符串?这里有一些天真的尝试

$ echo $string
--optionA hello --optionB `seq 1 2 10` --optionC `printf "happy %.0s" {1..3}`

$ eval "$string"
-bash: eval: --: invalid option
eval: usage: eval [arg ...]

$ echo `echo $string`
--optionA hello --optionB `seq 1 2 10` --optionC `printf "happy %.0s" {1..3}`


我正在使用GNU bash,版本3.2.57(1)-发行版(x86_64-apple-darwin15)

我在发布问题2分钟后得到了它

$ eval "echo $string"
--optionA hello --optionB 1 3 5 7 9 --optionC happy happy happy

既然你的答案是可以接受的,那就让我们把它做得更好吧

以下是:

 string="-e string"
 eval "echo $string"
将只打印
字符串
,而不打印
-e
,因为
-e
被解释为echo参数

更糟糕的是,像
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=“…”

相同,我假设您希望将参数传递到外部命令,而这
echo
只是一个示例。检查是否可以使用它来做你想做的事情,因为Kamil关于潜在漏洞的帖子是正确的。