You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在重定向输出的文件名中使用代码块内的变量?

问题原因分析

第一个脚本失效原因

Bash在执行命令前会优先解析所有重定向表达式,再执行命令块内的代码。所以>> output-$v.log中的$v会在命令块执行前就被展开,此时变量v还未赋值,最终生成空文件名的output-.log。

第二个脚本失效原因

添加分号后,{...};是一个独立执行的命令块,变量v在命令块执行完成后被赋值为1。但后面的>> output-$v.log是对空命令的重定向,空命令没有任何输出,所以生成的output-1.log内容为空。

解决方案

要实现“用命令块内的变量值命名输出文件,同时捕获命令块输出”,可以在命令块内部通过exec动态设置重定向,这样变量赋值完成后再指定输出文件:

{
    v=1
    # 从这一行开始,将标准输出和错误重定向到目标文件
    exec >> output-$v.log 2>&1
    echo $v
    # 后续所有命令的输出都会写入该文件
    echo "更多内容"
}

执行后会生成output-1.log,文件内容为:

1
更多内容

内容的提问来源于stack exchange,提问作者Saaru Lindestøkke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:38:14