У меня есть две функции bash: tsoc
и loopex
Я поместил их в средство проверки различий, чтобы вы могли видеть, что они почти идентичны: https://www.diffchecker.com/nygtg1l4
Когда я запускаю loopex
, я получаю желаемый тип вывода: "Оторванный" или "Пройдено" для каждого элемента во внешнем цикле. Однако для tsoc
, функции, которая почти идентична, я получаю «Оторванные» после каждой строки, будь то «Пройдено» или «Оторванные», что нежелательно.
Выходы
лупекс (правильно)
$ loopex
Checking 1: Orphaned
Checking 2: Orphaned
Checking 3: Passed
Checking 4: Orphaned
Checking 5: Orphaned
цок (неверно)
$ tsoc
Checking ./assignments/documents/Module2.pdf: Passed
Orphaned
Checking ./announcements.html: Passed
Orphaned
Checking ./projects.html: Passed
Orphaned
Checking ./assignments1.html: Passed
Orphaned
Checking ./lectures1.html: Passed
Orphaned
Checking ./random.txt: Orphaned
Checking ./index.html: Passed
Orphaned
Checking ./news.html: Passed
Orphaned
Как видите, Orphaned печатается после каждой строки в tsoc
, и я совершенно не понимаю, почему. Единственное, что я могу придумать, это то, что передача в цикл while каким-то образом нарушает логику оператора continue. Однако на странице руководства для continue указано, что он работает для циклов «пока» и «для».
Я был в этом в течение нескольких часов, и я в своем уме. Мы будем очень признательны за любой свет, который вы можете пролить на ситуацию.
continue
не может пересекать границы подоболочки. Посмотрите, как все циклы в Bash FAQ 001 используют перенаправление вместо конвейеров? Вот почему. Повторяй. - person Etan Reisner   schedule 08.07.2015