Разобрать выходные данные цикла for в переменную как строку с разделителями-запятыми - PullRequest
1 голос
/ 27 января 2012

Я собираю все имена файлов из каталога и хочу создать строку этих имен файлов с разделителями-запятыми, чтобы я мог передать эту строку в качестве аргумента приложению.Это мой фрагмент кода:

if [[ -n $(ls | grep lpt) ]]; then
  for files in $(find . -maxdepth 1 -type f); do
    #parse output into variable fileList
  done
fi

Как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 27 января 2012

Подумайте проще:

find . -maxdepth 1 -type f -printf '%P,' | sed -e 's/,$/\n/'

Выражение sed заменяет терминал , переводом строки.

1 голос
/ 27 января 2012

Вы должны использовать однострочники, показанные в других ответах, но для того, чтобы заполнить ваш скрипт, вы можете сделать:

if [[ -n $(ls | grep lpt) ]]; then
  for file in $(find . -maxdepth 1 -type f); do
    #parse output into variable fileList
    fileList="$file,$fileList"
  done
fi

#now remove the trailing comma from the fileList
fileList=$(sed 's/,$//' <<< "$fileList")

(Примечание: ваш цикл for не будет работать правильно, если в именах файлов есть пробелы)

0 голосов
/ 27 января 2012

Вместо вашего цикла вы можете использовать опцию find -exec вместе с расширением оболочки:

fileList=$(find . -maxdepth 1 -type f -exec echo -n "{}," \; | sed 's/,$//')

Бит sed предназначен только для удаления запятой. sed используется для редактирования входных потоков, т. Е. Здесь он получает конвейерный текст из find и редактирует то, что получает. Поскольку указанная команда оставляет в конце лишнюю ,, sed использует свою команду подстановки (s), чтобы избавиться от нее. Форма:

s/EXPRESSION/REPLACEMENT/

Таким образом, ,$ означает «запятую в конце строки, поскольку $ означает« в конце строки », а пустота между вторым и третьим слешем означает, что она заменяется ничем.

Что касается \; в find, это просто требование для использования -exec, поэтому он знает, когда он завершил чтение команд, и он находится на странице man. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...