Вместо вашего цикла вы можете использовать опцию find
-exec
вместе с расширением оболочки:
fileList=$(find . -maxdepth 1 -type f -exec echo -n "{}," \; | sed 's/,$//')
Бит sed
предназначен только для удаления запятой. sed
используется для редактирования входных потоков, т. Е. Здесь он получает конвейерный текст из find
и редактирует то, что получает. Поскольку указанная команда оставляет в конце лишнюю ,
, sed
использует свою команду подстановки (s
), чтобы избавиться от нее. Форма:
s/EXPRESSION/REPLACEMENT/
Таким образом, ,$
означает «запятую в конце строки, поскольку $
означает« в конце строки », а пустота между вторым и третьим слешем означает, что она заменяется ничем.
Что касается \;
в find
, это просто требование для использования -exec
, поэтому он знает, когда он завершил чтение команд, и он находится на странице man. :)