Loops 内环超过最大索引值
我正在命令行上运行一些代码,这些代码应该在双嵌套循环中执行一些简单的代码,以及一些Loops 内环超过最大索引值,loops,for-loop,nested-loops,carriage-return,Loops,For Loop,Nested Loops,Carriage Return,我正在命令行上运行一些代码,这些代码应该在双嵌套循环中执行一些简单的代码,以及一些printf-ing来跟踪我的进度: for i in {1..180}; do for j in {1..200}; do printf "$i-$j\r"; if [[ ! -f $dir/$i/$j/file0 ]] || [[ ! -f $dir/$i/$j/file1 ]]; then echo $j >> $i.missing; fi; done; done 令我大吃一惊的是,我看到内环索
printf
-ing来跟踪我的进度:
for i in {1..180}; do for j in {1..200}; do
printf "$i-$j\r";
if [[ ! -f $dir/$i/$j/file0 ]] || [[ ! -f $dir/$i/$j/file1 ]]; then
echo $j >> $i.missing;
fi; done; done
令我大吃一惊的是,我看到内环索引
$j
远超过200——我看到它高达960。这可以解释为什么这段代码运行得如此缓慢。我真的不确定我在这里犯了什么错误——bash中的嵌套循环是否不像我认为的那样工作?这里的问题与循环无关,而是在printf
中使用\r
字符。打印没有清除行,只是返回到行的开头-因此当您到达1-200
,接下来的100条打印语句不会清除所有的终端零,因此2-96
看起来是2-960
。换句话说,代码没有问题,只是报告进度的方式
有许多简单的修复方法:
\r
替换为\n
,尽管这将不再产生更新单行输出的所需行为printf”\r[许多空格]\r$i-$j
printf“\r%03d-%03d”$i$j
我简单地运行了2个for循环并简单地打印了文本,这对我来说很好,你的脚本中有控制M个字符吗?你能通过执行
cat-v输入文件检查一下吗?
?啊,我发现它几乎正确,也看到了我的答案:)干杯。