【问题标题】:Fill file using for loop in bash script在 bash 脚本中使用 for 循环填充文件
【发布时间】:2021-01-16 09:16:07
【问题描述】:

我正在尝试编写一个 bash 脚本,它将在 for 循环中填充一个文件,这样如果我使用参数 3 运行脚本,它将创建一个包含 3 行的文件。

这是我想出的脚本。但它创建的文件只有一行。

#!/bin/bash
for i in $1
do
cat > $PWD/http_file$1.csv <<EOF
host_$i,8080,app_$i,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
EOF
cat $PWD/http_file$1.csv
done

【问题讨论】:

    标签: bash for-loop


    【解决方案1】:

    for i in 3:bash 认为这是对in 之后的所有空格分隔选项的循环。在这种情况下,只有一个元素,所以循环只运行一次。

    您可以通过seq生成数字列表:

    echo $(seq 1 3)
    > 1 2 3
    

    TL;DR:使用for i in $(seq 1 $1)

    【讨论】:

    • 另外,您可以使用此方法stackoverflow.com/a/3737773/807865,它使用扩展{1..$i} - 不幸的是,如果您传递零参数,它们都会中断。如果这很重要,您需要为 0 添加一个特殊检查。
    • 抱歉 - “break”可能是错误的措辞。两者都产生序列1 0,它给出了两个元素。预期的结果是不输出任何行,但您会得到两行。
    • 啊——我只是尝试使用不同版本的seq,它实际上不会向后迭代......这可能是一个不同的实现细节。
    • TIL 似乎确实如此 - seq 的行为是非标准的,可能会有所不同。 unix.stackexchange.com/questions/64861/…
    • @andyvanee,我想让你尝试的具体是{1..$i},它不会扩展为序列。
    【解决方案2】:

    另一种选择:

    $ for (( i=1 ; i<=${1} ; i++ ))
    do
        echo "${i}"
    done
    1
    2
    3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-16
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多