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

如何在Bash中展开表达式生成多命令?批量创建文件并写入指定字符串

解决方案

当然可以实现!你不用写for循环,通过大括号展开(brace expansion)结合eval命令就能生成你想要的多个独立命令序列。

具体命令如下:

eval 'echo "TEST" > file'{1..9}'.txt;'

原理说明:

  1. 大括号{1..9}会先被shell展开为1 2 3 ... 9,所以整个字符串部分会被展开成:
    'echo "TEST" > file1.txt;' 'echo "TEST" > file2.txt;' ... 'echo "TEST" > file9.txt;'
    
  2. eval命令会把这些展开后的字符串作为独立的shell命令依次执行,最终效果和你手动写echo "TEST" > file1.txt ; echo "TEST" > file2.txt ; …… ; echo "TEST" > file9.txt完全一致。

另一种替代方案(用printf生成命令):

如果你觉得eval看起来有点“重”,也可以用printf生成完整的命令序列,再交给shell直接执行:

$(printf 'echo "TEST" > file%d.txt; ' {1..9})

这个命令里,printf会根据模板生成每个echo命令并加上分号,shell会直接执行生成的整个命令串,同样能达到目的。

为什么你之前的尝试没生效?

你写的echo "TEST" > file{0..9}.txt之所以不符合预期,是因为shell会先展开文件名部分,变成echo "TEST" > file1.txt > file2.txt ... > file9.txt——这种写法里,所有重定向都是针对同一个echo命令的,shell会依次打开每个文件进行截断操作,最终只有最后一个文件(file9.txt)会保留TEST内容,前面的文件都会被创建但为空。而我们上面的方法是让每个文件对应一个独立的echo命令,就能保证每个文件都被写入TEST。

内容的提问来源于stack exchange,提问作者Nebeski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:09:23