用变量中的字符串命令替换bash命令的行为

贝尔卡
$ echo $(echo x; echo y)
x y
$ a='echo x; echo y'
$ echo $($a)  # expect 'x y'
x; echo y
  1. 为什么命令替换会以这种方式表现?
  2. 如何在不使用eval和的情况下对存储在变量中的命令列表执行命令替换bash -c

echo $(eval $a)echo $(bash -c "$a")确实完成了我想要的操作,但是我听说使用eval通常是解决问题的错误方法,因此我想知道如何在没有这些命令的情况下进行管理(使用bash -c实际上是同一回事)

库萨兰达

分词发生在命令评估的后期。对您而言最关键的是,它发生变量扩展和命令替换之后。

这意味着第二行

s="echo a; echo b"
echo $($s)

将首先$s扩展到echo a; echo b,然后执行该命令,而不将其拆分为由两个echos组成的复合命令

(详见:$s获取拆分成四个词,echoa;echob的封装。$(...)执行该作为一个命令,echo有三个参数,a;echob。)

echo因此,给予最外层的是字符串a; echo b(实际上是三个单词,$(...)没有引号),因为这是最内层输出的echo

比较一下

s1="echo a"
s2="echo b"
echo $($s1;$s2)

结果就是您所期望的。

是的,eval在大多数情况下,“是邪恶的”,sh -c既笨拙又脆弱。但是,如果您对外壳脚本中的字符串信任一些外壳代码,则这些工具是使该代码正确执行的唯一(?)方法,因为这通常需要明确评估字符串中的文本作为外壳程序代码(评估的所有阶段从头到尾)。特别是如果它是复合命令。


我认为这仅仅是由于Unix shell与文本的密切关系,您才幸运地echo $($s)执行了所有操作

只需考虑一下获取C程序以执行一段以字符串形式给出的C代码所必须采取的步骤...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用变量中的字符串命令替换bash命令的行为

来自分类Dev

在bash中如何替换字符串变量,并将其设置为sed命令

来自分类Dev

用其输出替换字符串中的命令

来自分类Dev

用bash脚本中的变量替换字符串

来自分类Dev

用 / 字符替换字符串的 sed 命令

来自分类Dev

用另一个命令的返回值替换bash命令输出中的子字符串(例如,将时间戳转换为日期)

来自分类Dev

使用SED命令在Jenkinsfile中用变量替换字符串

来自分类Dev

Bash:如何在Bash命令中创建永久替换字符串?

来自分类Dev

用管道替换包含管道的字符串的命令

来自分类Dev

使用 sed 命令用模式替换多行字符串

来自分类Dev

用javascript中的字符串中的html实体替换(LaTeX)命令

来自分类Dev

用javascript中的字符串中的html实体替换(LaTeX)命令

来自分类Dev

bash 命令中的变量替换

来自分类Dev

用字符串替换命令替换

来自分类Dev

替换命令条件以替换字符串

来自分类Dev

用特定的字符串替换命令行中的文件

来自分类Dev

将字符串替换为命令结果bash中的行

来自分类Dev

Bash:如何替换上一个命令中的字符串?

来自分类Dev

替换要在zsh中执行的命令中的字符串

来自分类Dev

用bash中的ip地址替换json字符串中的变量

来自分类Dev

字符串命令的异常行为

来自分类Dev

bash中命令替换的奇怪行为

来自分类Dev

根据该字符串的值,用该命令的输出替换该字符串

来自分类Dev

替换文件中字符串的命令

来自分类Dev

在Java中替换bibtex或Latex {\ dg}字符串命令

来自分类Dev

vim:在替换命令中使用搜索中的字符串

来自分类Dev

在Java中替换bibtex或Latex {\ dg}字符串命令

来自分类Dev

sed命令-替换文件中的字符串

来自分类Dev

文件包含命令列表,其中每个命令都有一个需要用变量中的字符串替换的字符串

Related 相关文章

  1. 1

    用变量中的字符串命令替换bash命令的行为

  2. 2

    在bash中如何替换字符串变量,并将其设置为sed命令

  3. 3

    用其输出替换字符串中的命令

  4. 4

    用bash脚本中的变量替换字符串

  5. 5

    用 / 字符替换字符串的 sed 命令

  6. 6

    用另一个命令的返回值替换bash命令输出中的子字符串(例如,将时间戳转换为日期)

  7. 7

    使用SED命令在Jenkinsfile中用变量替换字符串

  8. 8

    Bash:如何在Bash命令中创建永久替换字符串?

  9. 9

    用管道替换包含管道的字符串的命令

  10. 10

    使用 sed 命令用模式替换多行字符串

  11. 11

    用javascript中的字符串中的html实体替换(LaTeX)命令

  12. 12

    用javascript中的字符串中的html实体替换(LaTeX)命令

  13. 13

    bash 命令中的变量替换

  14. 14

    用字符串替换命令替换

  15. 15

    替换命令条件以替换字符串

  16. 16

    用特定的字符串替换命令行中的文件

  17. 17

    将字符串替换为命令结果bash中的行

  18. 18

    Bash:如何替换上一个命令中的字符串?

  19. 19

    替换要在zsh中执行的命令中的字符串

  20. 20

    用bash中的ip地址替换json字符串中的变量

  21. 21

    字符串命令的异常行为

  22. 22

    bash中命令替换的奇怪行为

  23. 23

    根据该字符串的值,用该命令的输出替换该字符串

  24. 24

    替换文件中字符串的命令

  25. 25

    在Java中替换bibtex或Latex {\ dg}字符串命令

  26. 26

    vim:在替换命令中使用搜索中的字符串

  27. 27

    在Java中替换bibtex或Latex {\ dg}字符串命令

  28. 28

    sed命令-替换文件中的字符串

  29. 29

    文件包含命令列表,其中每个命令都有一个需要用变量中的字符串替换的字符串

热门标签

归档