Bash 引号禁用转义

Bash quotes disable escaping

我想要 运行 一些命令,让我们从我的 bash 脚本中将其命名为 "test" 并把一些来自 bash 变量的参数放在那里。

我的脚本:

#!/bin/bash -x
PARAMS="-A 'Foo' -B 'Bar'"
./test $PARAMS

我有:

+ PARAMS='-A '\''Foo'\'' -B '\''Bar'\'''
+ ./test -A ''\''Foo'\''' -B ''\''Bar'\'''

错了!

另一种情况:

#!/bin/bash -x
PARAMS='-A '"'"'Foo'"'"' -B '"'"'Bar'"'"
./test $PARAMS

结果也很伤心:

+ PARAMS='-A '\''Foo'\'' -B '\''Bar'\'''
+ ./test -A ''\''Foo'\''' -B ''\''Bar'\'''

所以,问题是 – 如何使用 bash 变量作为某些命令的命令行参数。 变量类似于“-A 'Foo' -B 'Bar'”(完全是单引号) 结果必须是使用参数“-A 'Foo' -B 'Bar'”调用程序“./test”,如下所示:

./test -A 'Foo' -B 'Bar'

谢谢!

使用 BASH 数组存储完整或部分命令行更安全,如下所示:

params=(-A 'Foo' -B 'Bar')

然后将其命名为:

./test "${params[@]}"

这将与:

./test -A 'Foo' -B 'Bar'