Как об этом:
echo "$PATH" | sed -e 's/:/\n/g'
(см sed's s
command, sed -e 'y/:/\n/'
также будет работать, и эквивалентно tr ":" "\n"
от некоторых других ответов.)
Это предпочтительнее не усложнять, если абсолютно необходимо: цикл for здесь не нужен. Есть и другие способы, чтобы выполнить команду для каждого элемента в списке, в соответствие с Unix Philosophy:
Это Unix философия: Написание программ, которые делают одну вещь и делают это хорошо. Напишите программы для совместной работы. Пишите программы для обработки текстовых потоков, потому что это универсальный интерфейс.
, такие как:
echo "$PATH" | sed -e 's/:/\n/g' | xargs -n 1 echo
Это функционально эквивалентен для цикла перебора элементов PATH, выполнив эту последнюю echo
команду для каждого элемента. -n 1
сообщает xargs
, чтобы указать только 1 аргумент; без него мы получим тот же результат, что и echo "$PATH" | sed -e 'y/:/ /'
.
Поскольку это использует xargs
, которая встроена поддержка разделить вход и повторяет вход, если команда не задана, мы можем написать, что, как:
echo -n "$PATH" | xargs -d ':' -n 1
-d ':'
говорит xargs использовать :
для разделения это ввод, а не новая строка, и -n
сообщает /bin/echo
, чтобы не писать новую строку, иначе мы закончим с пустой задней строкой.
Отсутствие причин для повторения итерации вашего вывода с новой строкой. И это не будет работать для записей пути, в которых есть пробелы (или символы глобуса). –
@ EtanReisner задал вопрос именно о нем – doublesharp
Достаточно честно, я бы замалчивал это предпочтение. Это все еще небезопасно для пробелов или глобусов, хотя и означает, что преобразование в пробелы или 'NUL', вероятно, будет лучше, а затем разобрать это для цикла (хотя бы 'while'). –