我试图写一个形式的BASH循环:
~/$ for i in {1..$(grep -c "match" file)} ; do echo $i ; done
{1..20}
我希望它会产生计数输出。所以我尝试了这个:
~/$ export LOOP_COUNT=$(grep -c "match" file)
~/$ for i in {1..$LOOP_COUNT} ; do echo $i ; done
{1..20}
我重新使用的是:
~/$ for i in $(seq 1 1 $(grep -c "match" file)) ; do echo $i ; done
1
2
3
...
20
完美! 但是如何在不使用 seq
的情况下获得该行为?
答案 0 :(得分:4)
你试过这个吗?
max=$(grep -c "match" file)
for (( c=1; c <= $max; c++ ))
do
echo $c
done
答案 1 :(得分:3)
根据bash文档
序列表达式采用{x..y [.. incr]}的形式,其中x和y是 整数或单个字符,incr,可选 增量,是一个整数。
在其他情况下你仍然可以使用eval
,但Mithrandir的建议可能更快。
eval "for i in {1..$(grep -c 'match' file)} ; do echo \$i ; done"
答案 2 :(得分:0)
这是一个递归解决方案:
loop () {
i=$1
n=$2
echo $i
((i < n)) && loop $((i+1)) $n
}
LOOP_COUNT=$(grep -c "Int" sum.scala)
loop 1 $LOOP_COUNT