Лучшее решение: не пытайтесь сначала проанализировать вывод ls.
Официальная вики на канале irc.freenode.org #bash объясняет, почему это плохая идея, и какие альтернативные подходы вы можете использовать вместо: http://mywiki.wooledge.org/ParsingLs
Использование команды find, stat и аналогичных инструментов обеспечит требуемую функциональность без ошибок (не все из них очевидны - некоторые возникают только при переходе на платформы с различными реализациями ls) .
Для вашего конкретного примера я предполагаю, что вы пытаетесь найти только файлы (а не каталоги) в вашем текущем каталоге; Ваша текущая реализация, использующая ls -l
, содержит ошибки, так как исключает файлы с разрешениями + t или setuid. Правильный путь для реализации этого будет следующим:
find . -maxdepth 1 -type f -printf '%f\n'