LINUX.ORG.RU

Массив в баше


0

0

Есть массив
m=$(ls)
Ежели написать
echo $m
То все элементы будут в одну строку. Надо сделать так чтобы каждый элемент был на новой строке. Я знаю что можно это сделать sed'ом. sed 's/ /\n/g'. Но мне интересны встроенные в баш варианты.

Ответ на: комментарий от sidor

Не. Там же массив уже. Так не получается. Т.е.
m=$(ls) - это массив. Его можно так юзать
# m=$(ls); for i in $m; do echo $i; done
Вот думаю как без sed'а вывести не в одной строке.

facelift
() автор топика
Ответ на: комментарий от facelift

Какой я хитрый.
Чтобы каждый раз не выполнять какую-то тяжелую команду ее надо сохранять в переменную. Например.
m=$(find -type f -name \*.cpp)
Теперь можно каждый раз не делать поиск, а юзать эту переменную.
Например можно найти все файлы в которых нет строчки stdafx.
$diff <(grep -i "stdafx" $m | cut -f1 -d':') <(print "%s\n" $m)

facelift
() автор топика

Чего вы все так боитесь делать временные файлы?
С ними все упрощается на порядок.
Жалко диск дергать? есть tmpfs

sdio ★★★★★
()
Ответ на: комментарий от facelift

Да, это тоже массив. И помните, что в именах файлов бывают пробелы и прочие символы.

mky ★★★★★
()

> m=$(ls)
> Ежели написать

> echo $m

> Надо сделать так чтобы каждый элемент был на новой строке.


В кавычки возьми.

YAR ★★★★★
()
Ответ на: комментарий от Komintern

>for i in $m; do echo $i; done

Не покатит, если в строках пробелы.

KRoN73 ★★★★★
()
Ответ на: комментарий от facelift

Почему именно так - не знаю, просто если не берешь выражение / переменную в кавычки, то спецсимволы (в данном случае \n) игнорируются.

YAR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.