bash中的echo命令行为问题

时间:2014-06-26 08:40:54

标签: linux bash terminal

command="echo 'hello world' > file.txt";
$command;

我期待它会写下'#34; hello world" text到file.txt, 但它打印整个字符串,

'hello world' > file.txt

我的代码有什么错误?

2 个答案:

答案 0 :(得分:2)

替换变量后,仅扫描结果以进行分词和通配符扩展。不处理其他特殊shell字符,例如引号和重定向。您需要使用eval完全重新处理它:

eval "$command"

答案 1 :(得分:0)

您无法在变量中存储完整的命令行并执行如下操作。

如果命令行来自用户或来自外部来源,使用此功能可以正常工作,但很危险

bash -c "$command"

安全方法是将命令存储在BASH数组中:

command=(echo 'hello world')

执行它:

"${command[@]}" > file.txt