从包含带空格的参数的字符串中解析执行命令

安迪梅耶

我想执行一个由变量(cmd在此示例中为变量)给出的命令

cmd="echo 'First argument'"
$cmd

预期结果将是:

First argument

但是...实际结果是:

'First argument'

什么?我不明白为什么我可以在输出中看到单引号。毕竟,如果将直接发出命令(=变量$ cmd的内容),则不会在输出中引起引号,它的行为如预期:

$ echo 'First argument'
First argument

为了说明我在现实生活中想要实现的目标:在我的部署脚本中,有一个这样的代码块(经过简化,但您明白了):

#!/bin/bash
function execute {
    cmd=$1
    echo "Executing $cmd ..."

    # execute the command:
    $cmd
}    

VERSION=1.0.2
execute "git tag -a 'release-$VERSION'"

现在,Git将创建一个包含单引号的标签:

git tag
'1.0.2'

这不是我想要的...

该怎么办?

(bash版本:GNU bash 3.1.0)

(我在这里发现了一个非常相似的问题,但答案不适用于我的问题)

控制台盒
cmd="echo 'First argument'"
$cmd

发生单词拆分时会发生什么,实际的结果命令是:

echo "'First" "argument'"

用单引号引起来的双语法分析将永远不会发生。

另外,最好使用数组:

#!/bin/bash

function execute {
    cmd=("$@")  ## $@ is already similar to an array and storing it to another is just optional.
    echo "Executing ${cmd[*]} ..."

    # execute the command:
    "${cmd[@]}"
}    

VERSION=1.0.2
execute git tag -a "release-$VERSION"

对于eval在那种情况一个艰难的选择。您不仅会获得意外的解析结果,而且还会意外地运行危险的命令。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在bash中使用带空格的参数执行命令

来自分类Dev

在Bash中以字符串形式执行命令

来自分类Dev

在Python中从命令行解析带空格的字符串

来自分类Dev

解析JAVA中的多行字符串,该字符串之间包含空格

来自分类Dev

如何在BASH中执行命令字符串?

来自分类Dev

如果程序在Shell脚本中输出特殊字符串,则执行命令

来自分类Dev

在bash中执行命令,并以适当的文件通配符操作将其作为字符串传递

来自分类Dev

如何在echo中以字符串形式执行命令

来自分类Dev

如何传递docopt参数,其中参数是python中带空格的字符串

来自分类Dev

字符串无法正确解析带空格

来自分类Dev

匹配Perl中带空格或无空格的字符串

来自分类Dev

从脚本中将包含空格的字符串作为命令行参数传递

来自分类Dev

Swift NSAlert() 参数打印带空格的字符串

来自分类Dev

将bash参数连接到带空格的单个字符串中

来自分类Dev

当字符串包含空格时,SQL命令的奇怪行为

来自分类Dev

如何使用包含空格的$ variable执行命令?

来自分类Dev

传递包含空格和引号的参数字符串

来自分类Dev

解析并执行命令

来自分类Dev

PHP解析命令行结果,URL字符串中带有空格

来自分类Dev

在C ++中读取带空格的字符串

来自分类Dev

读取带空格的字符串,直到在C中换行

来自分类Dev

字符串中命令的Powershell解析

来自分类Dev

解析带空格的字符串列表

来自分类Dev

解析带空格的字符串列表

来自分类Dev

批处理脚本:我们可以在SET / p命令中设置带空格的字符串吗?

来自分类Dev

如何使用带空格的字符串插值在bash脚本中按程序生成命令?

来自分类Dev

即使在命令行中传递的参数中包含“未找到子字符串”

来自分类Dev

当文件中有特定的字符串时,如何重复执行命令?

来自分类Dev

从带有单引号和双引号的字符串执行命令

Related 相关文章

  1. 1

    在bash中使用带空格的参数执行命令

  2. 2

    在Bash中以字符串形式执行命令

  3. 3

    在Python中从命令行解析带空格的字符串

  4. 4

    解析JAVA中的多行字符串,该字符串之间包含空格

  5. 5

    如何在BASH中执行命令字符串?

  6. 6

    如果程序在Shell脚本中输出特殊字符串,则执行命令

  7. 7

    在bash中执行命令,并以适当的文件通配符操作将其作为字符串传递

  8. 8

    如何在echo中以字符串形式执行命令

  9. 9

    如何传递docopt参数,其中参数是python中带空格的字符串

  10. 10

    字符串无法正确解析带空格

  11. 11

    匹配Perl中带空格或无空格的字符串

  12. 12

    从脚本中将包含空格的字符串作为命令行参数传递

  13. 13

    Swift NSAlert() 参数打印带空格的字符串

  14. 14

    将bash参数连接到带空格的单个字符串中

  15. 15

    当字符串包含空格时,SQL命令的奇怪行为

  16. 16

    如何使用包含空格的$ variable执行命令?

  17. 17

    传递包含空格和引号的参数字符串

  18. 18

    解析并执行命令

  19. 19

    PHP解析命令行结果,URL字符串中带有空格

  20. 20

    在C ++中读取带空格的字符串

  21. 21

    读取带空格的字符串,直到在C中换行

  22. 22

    字符串中命令的Powershell解析

  23. 23

    解析带空格的字符串列表

  24. 24

    解析带空格的字符串列表

  25. 25

    批处理脚本:我们可以在SET / p命令中设置带空格的字符串吗?

  26. 26

    如何使用带空格的字符串插值在bash脚本中按程序生成命令?

  27. 27

    即使在命令行中传递的参数中包含“未找到子字符串”

  28. 28

    当文件中有特定的字符串时,如何重复执行命令?

  29. 29

    从带有单引号和双引号的字符串执行命令

热门标签

归档