string - Bash:如何评估这个字符串?

标签 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 `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)-release (x86_64-apple-darwin15)

最佳答案

既然您的回答没问题并且可以接受,那么我们就来改进一下吧。

以下内容:

 string="-e string"
 eval "echo $string"

将仅打印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="..." 相同。

关于string - Bash:如何评估这个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53036217/

相关文章:

linux - 当在 .tcsh 文件中回显文本时,less 命令无法正常工作

c++ - 为字符串分配内存时获取 SIGSEGV/SIGABRT

c++ - cpp中的映射字符串

bash - 匹配字符串中几个可能的字符之一

bash - 将电子邮件文本从 procmail 重定向到 bash 脚本

Bash 使用 echo 给一个单词上色

javascript - 亚马逊 Echo Lambda 函数。控制台在哪里打印?

python - 我怎样才能要求 n 并在一行中输入 n 个数字

python - 在没有 split() 的情况下在 Python 中拆分字符串

linux - 如果没有停止,需要在 1 小时内重新启动服务器脚本