2017-10-06 135 views
0

我得到了这样一块的庆典代码:这里字符串中嵌套循环

var="empty" 

find $path1 -maxdepth 3 | while read line; do 
find $path2 -maxdepth 1 | while read line2; do   
    if [[ $line2 != $var ]]; then 
     echo "new value" 
    fi 
    var=$line2 
done <<< "$line2" 
done 

的问题是...如何让var逗留变化?因为我想响应由回路找到,但它不工作,每一个新的价值;第二循环开始迭代,每次(var="empty"

如何使var=$line2每次迭代

+0

我读的是错误的,还是你读取到第2行的值从stdin读取,并将line2的值提交到循环中,在stdin处使用here-string完成?我知道有一个查找管道,但是我的bash提供了字符串优先级。 'echo -e“one \ nthree \ nfive”| while read num; do echo $ num; done <<<“two”;' 输出是两个。输入流被完全忽略。 –

+0

我知道这是错误的。我只想知道如何使var在循环中更改。我在这里为这个主题做了这个主题,因为在类似的人签名为这里的重复字符串 – MPAW

回答

-1

您正在阅读?从stdin读取到line2中的值,然后将line2的值送到done的循环中,在stdin中带有一个here-string。bash给出了here-string的优先级,所以line2只能从line2分配,这意味着它从未设置过

echo -e "one\nthree\nfive" | while read num 
do echo $num 
done <<< "two" 

输出是two。输入流被完全忽略。

由于您从不使用外层循环,因此您无需任何理由也定义了嵌套循环。请在发布之前清理您的代码。

find ~ | while read f; do var=$f; echo $f; done 

这工作正常。

+0

我也很难理解这个问题和他的意图,但是这绝对应该是一个评论,而不是一个答案。 –