command="echo 'hello world' > file.txt";
$command;
我期待它会写下'#34; hello world" text到file.txt, 但它打印整个字符串,
'hello world' > file.txt
我的代码有什么错误?
答案 0 :(得分:2)
替换变量后,仅扫描结果以进行分词和通配符扩展。不处理其他特殊shell字符,例如引号和重定向。您需要使用eval
完全重新处理它:
eval "$command"
答案 1 :(得分:0)
您无法在变量中存储完整的命令行并执行如下操作。
如果命令行来自用户或来自外部来源,使用此功能可以正常工作,但很危险:
bash -c "$command"
安全方法是将命令存储在BASH数组中:
command=(echo 'hello world')
执行它:
"${command[@]}" > file.txt