如何在bash中使用包含引号的变量来运行命令?

时间:2016-05-27 12:07:30

标签: string bash shell quotes

我正在尝试在注入带引号的变量时运行命令,但bash会不断添加我不需要的额外引号并伪造进程......

这是我的例子:

set -x
MYVAR=" --name='user should login' "
cucumber $MYVAR

这导致运行这个:

cucumber  '--name='\''user' should 'login'\'''

并且命令失败。但是,当我按原样运行cucumber --name='user should login'时,不使用变量,一切都按预期进行。

PS。与cucumber "${MYVAR}"cucumber "$MYVAR"

相同的结果

2 个答案:

答案 0 :(得分:3)

最好使用BASH数组存储命令行:

myvar=(--name 'user should login')
cucumber "${myvar[@]}"

我还降低了你的变量,因为使用所有UPPER案例变量有时会出问题。

答案 1 :(得分:-1)

这样做没有 bash 主义:

MYVAR=" --name='user should login' "
eval cucumber $MYVAR