执行包含shell变量引号的命令

时间:2012-06-18 08:35:45

标签: bash shell

我目前在从shell变量执行命令时遇到问题。

通常,以下工作符合预期:

COMMAND="echo A"
echo $COMMAND
$COMMAND

产生

echo A
A

但如果我这样做

COMMAND="su aUser -s /bin/bash -c 'echo A'"
echo $COMMAND
$COMMAND

我得到了

su aUser -s /bin/bash -c 'echo A'
Password: 
A': -c: line 0: unexpected EOF while looking for matching `''
A': -c: line 1: syntax error: unexpected end of file

如果我输入

su aUser -s /bin/bash -c 'echo A'

直接按预期工作。

似乎我的假设是$ COMMAND等于输入内容,因为命令直接是错误的。

问题

1)有谁知道如何从变量运行命令?

2)

之间究竟有什么区别
COMMAND="command"
$COMMAND

command

2 个答案:

答案 0 :(得分:31)

数组对于保持参数整体非常有用:

command=(su aUser -s /bin/bash -c 'echo A')

并完全按照以下方式调用它:

"${command[@]}"

答案 1 :(得分:23)

您需要eval

$ eval $VARIABLE