28

我目前在从 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

?

4

2 回答 2

39

数组对于保持参数完整很有用:

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

并完全像这样调用它:

"${command[@]}"
于 2012-06-18T10:18:38.507 回答
29

你需要eval.

$ eval $VARIABLE
于 2012-06-18T08:39:06.923 回答