关于Bash for循环:Bash for循环 – 在n之后命名(这是用户的输入)

Bash for loop - naming after n (which is user's input)

本问题已经有最佳答案,请猛点这里访问。

我使用for i in {1..n}循环遍历命令并希望输出文件具有n扩展名。

例如:

1
2
3
  for i in {1..2}
  do cat FILE > ${i}_output
  done

但是n是用户的输入:

1
2
3
4
5
6
  echo 'Please enter n'
  read number
  for i in {1.."$number"}
  do
    commands > ${i}_output
  done

循环滚动n次 - 这很好,但我的输出看起来像这个{1..n}_output

如何在这样的循环中命名我的文件?

编辑

也尝试了这个

1
2
3
4
5
  for i in {1.."$number"}
  do
    k=`echo ${n} | tr -d '}' | cut -d"." -f 3`
    commands > ${k}_output
  done

但它不起作用。

  • stackoverflow.com/questions/169511/…


使用"C风格"for -loop:

1
2
3
4
5
6
echo 'Please enter n'
read number
for ((i = 1; i <= number; i++))
do
    commands > ${i}_output
done

请注意,for -loop标头中的numberi之前不需要$,但需要使用双括号。


for循环中的range参数仅适用于常量值。 所以用{1..10}之类的值替换{1..$num}

要么

将for循环更改为:

1
  for((i=1;i<=number;i++))

  • i <= number或者你会错过最后一个元素。 你也不需要$(参见我的回答)。
  • @Johnsyweb修正了它。 但是$也不会伤害:)


你可以使用一个简单的for循环(类似于C,C ++等langaues中的循环):

1
2
3
4
5
6
echo 'Please enter n'
read number
for (( i=1; i <= $number; i++ ))
do
  commands > ${i}_output
done

  • i <= number。 否$
  • @Johnsyweb,我试过了。 似乎两者都有效。:)
  • 太棒了:-)每一天都是一个上学日。
  • 对..我也学到了新东西。 谢谢!:)


请尝试使用seq (1)。 如在for i in $(seq 1 $number)中。

  • seq涉及执行可能减慢速度的外部命令,但我不确定是否需要进行下调。