См. §3.2.2 Руководства BASH:https://www.gnu.org/software/bash/manual/bash.html
Поскольку каждый канал выполняется в отдельной подоболочке, обновление переменной count в команде канала выходит за рамки.
Однако вы можете настроить выполнение последнего канала в основной области, используя shopt -s lastpipe
в начале вашего скрипта. Это приведет к обновлению переменной count в той же области, что и основная оболочка вашего скрипта, что позволит восстановить окончательное значение счетчика.
Причина, по которой два файла кажутся одинаковыми с ls -l
, заключается в том, что в имени одного из них есть символ возврата (\010
):, поэтому, когда ls -l
выводит свое имя, он выводит PP3
, а затем — символ возврата. возвращает курсор над 3
, затем 2
, что приводит к PP2
.
Вы можете увидеть это с помощью
printf PP3; sleep 2; printf '\0102'
Что касается , почему это происходит с SAP, я понятия не имею.