我想在 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