创建 100 个包含“1”的文件,无需 for 循环

1 linux bash shell scripting

我试图制作一个脚本,该脚本将创建一百个名为 log-01、log-02、log-03 等的文件,每个文件中都包含“1”,没有任何循环,但它总是给出错误“不明确的重定向”

#!bin/bash
echo "1">log-{01..100}
Run Code Online (Sandbox Code Playgroud)

我尝试在 log-{01..100} 之前添加 $ 或将其放在引号中,但没有任何帮助。

kni*_*ttl 6

输出只能重定向到单个文件,而不能重定向到多个文件。

\n

如果您想要多个输出文件,可以使用tee

\n
#!/bin/bash\necho \'1\' | tee log-{01..99} log-100\n
Run Code Online (Sandbox Code Playgroud)\n

这将创建名为 log-01、log-02、\xe2\x80\xa6、log-98、log-99 和 log-100 的文件。

\n

请注意,上述内容仅适用于从版本 4.0 开始的 bash。\n如果您的 bash 较旧并且不支持使用前导零格式化大括号扩展,则可以使用普通的旧 shell 进行命令替换:

\n
#!/bin/sh\necho \'1\' | tee $(printf \'log-%02d \' $(seq 100))\n# or formatting with GNU sed directly:\necho \'1\' | tee $(seq -f \'log-%02g\' 100)\n
Run Code Online (Sandbox Code Playgroud)\n

这是少数不能进行扩展的用例之一,因此可以在扩展后进行字段分割。

\n

  • 但是 `log-{01..100}` 扩展为 `log-001` …`log-100`,与 `log-{001..100}` 完全相同,这是(?)不受欢迎的。您需要的是“log-{{01..99},100}”以将其保留为2位数字,直到出现“log-100”的特殊情况(如果这就是OP的意图)。应该是“log-{00..99}”吗? (3认同)