小编use*_*264的帖子

将大括号和变量扩展合并为一行

我想要一个将文件名作为参数并将标准输出复制到所有这些文件的日志记录功能。这是我到目前为止提出的:

function logger() {
    exec > >(tee -ia /var/log/{log1,log2})
}
Run Code Online (Sandbox Code Playgroud)

当我尝试用 替换{log1,log2}{$*},我得到了由空格分隔的参数。所以,我想我会做这样的事情:

function logger() {
    exec > >(IFS=,; tee -ia /var/log{"$*"}
}
Run Code Online (Sandbox Code Playgroud)

这不能做我想要的,因为在继续进行变量替换之前发生了大括号扩展。所以,我想我可以这样做:

function logger() {
    exec > >(IFS=,; eval "tee -ia /var/log/\{$*\}")
}
Run Code Online (Sandbox Code Playgroud)

但这行为相同,即logger one two创建一个名为{one,two}.

这是为什么?如何让大括号扩展工作以便tee写入多个文件?

bash brace-expansion tee variable-substitution

2
推荐指数
1
解决办法
80
查看次数