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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.