bash中的Echo命令行为问题


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

最新更新