command="echo 'hello world' > file.txt";
$command;
我希望它将"hello world"文本写入file.txt,但是它将整个字符串打印为
'hello world' > file.txt
我的代码有什么问题?
替换变量后,只扫描结果以进行分词和通配符扩展。不处理其他特殊shell字符,如引号和重定向。您需要使用eval
来完全重新处理它:
eval "$command"
您不能将完整的命令行存储在变量中并像这样执行。
使用这个可以工作,但是是危险的如果命令行来自用户或来自外部源:
bash -c "$command"
安全的方法是将命令存储在BASH数组中:
command=(echo 'hello world')
然后像这样执行:
"${command[@]}" > file.txt