gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:50:08 26 4
gpt4 key购买 nike

如果我写

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com