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

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

我想在 bash 脚本中执行一个命令,其中需要双引号和单引号。

我想要运行的命令如下所示:

some_command --query "'val' is not null"

我试图实现的是构建这个命令并从 bash 脚本执行它

command='some_command --query " 'val' is not null "'
output=$($command)
# + some_command --query '"' val is not null '"'

command='some_command --query \" 'val' is not null \"'
output=$($command)
# + some_command --query '\"' val is not null '\"'

但随后该命令是用引号引起来的,因此实际命令的语法是错误的。

我已经尝试了很多不同的方法,例如使用字符代码或使用数组构建命令,然后执行,"${array[@]}"但都无济于事。

更新: 我正在使用 bash 版本运行它GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

答案1

尝试将复杂的命令放入简单的变量中注定会失败。详情请参见我试图将命令放入变量中,但复杂的情况总是失败!

很有可能,您想要做的事情最好通过 bash 来完成功能

如果你真的想使用变量,那么使用 bash 数组:

command=(some_command --query " 'val' is not null ")
"${command[@]}"

command我们可以使用以下命令查看数组的实际值declare

$ declare -p command
declare -a command=([0]="some_command" [1]="--query" [2]=" 'val' is not null ")

我们可以看到这保留了 周围的单引号val

例子

$ command=(echo -E " 'val' is not null ")
$ "${command[@]}"
 'val' is not null 

相关内容