【问题标题】:BASH shell script to quickly create and populate new test files用于快速创建和填充新测试文件的 BASH shell 脚本
【发布时间】:2011-05-14 21:40:47
【问题描述】:
# for i in {1..5} do echo "New File $i" > file$i done
-bash: syntax error near unexpected token `>'

我尝试了上面的单行脚本,但由于上述错误而失败。我正在尝试自动化打字过程:

echo "New File" > file1  
echo "New File" > file2  
echo "New File" > file3  
echo "New File" > file4  
echo "New File" > file5  

我正在尝试在不创建如下脚本文件的情况下执行此操作:

#!/usr/bin/env bash                                                                                                                                                                                       
for i in {1..5} 
  do  
    echo "New File $i" > file$i 
  done

此脚本有效,但我希望能够在命令行的一行中执行类似的操作。

我知道问题与重定向 > 到文件有关。我尝试转义 > 重定向一些其他的东西,并谷歌搜索,但我没有想出一些有用的东西。

我希望能够在 cli 的一行中执行此操作的原因是因为我希望能够不断更改文件的数量和内容以进行测试,并且我更愿意只在命令上执行此操作行而不是编辑脚本文件。

更新 1

我按照建议尝试了命令分隔符并得到以下错误:

# for i in {1..5} do ; echo "New File $i" > file$i ; done
-bash: syntax error near unexpected token `echo'

更新 2

我在更新 1 中错误地使用了上述命令分隔符。 完成命令分隔符,因为它们在下面的答案中就像一个魅力。

【问题讨论】:

  • 请正确格式化您的代码(每个代码行缩进 4 个空格)。这将使您的问题更易于阅读和理解,并提高您获得正确答案的机会。
  • 我一直在想这个问题。 +1

标签: bash scripting for-loop


【解决方案1】:

do之前done之前需要一个分号或一个新行。在do 之后你不需要一个,尽管它不会造成伤害。

单行

for i in {1..5}; do echo "New File $i" > file$i; done
               ^                               ^ 

多行

for i in {1..5}
do
    echo "New File $i" > file$i
done

for i in {1..5}; do
    echo "New File $i" > file$i
done

【讨论】:

  • "...虽然没有什么坏处":如果我在 do 后面加上一个额外的分号,我会收到一条错误消息 (for a in b; do; echo; done: "-bash: 意外标记附近的语法错误';'")
【解决方案2】:

以下对我有用,您需要对更新 1 做的就是在 fordo 之间插入一个命令分隔符:

for i in {1..5} ; do echo "New File $i" >file$i ; done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 2017-02-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多