2017-10-06 98 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

我也很難理解這個問題和他的意圖,但是這絕對應該是一個評論,而不是一個答案。 –