Как напечатать элемент массива массива Bash на отдельных строках? Это работает, но, безусловно, есть лучший способ:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
Пробовал этот, но это не сработало:
$ IFS=$'\n' echo ${my_array[*]}
one two three
| grep -v '^$'
?Просто приведите аргумент в пользу эха:
субоболочка помогает восстановить IFS после использования
источник
IFS=$'\n' echo "${my_array[*]}"
не работает. Ну что ж!echo
что встроен в Bash. Тем не менее, вы можете обернуть его в функцию, и она будет работать! gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8Использование для :
Использование истории ; обратите внимание, что это не удастся, если ваши значения содержат
!
:Использование базового имени ; обратите внимание, что это не удастся, если ваши значения содержат
/
:Использование shuf ; обратите внимание, что результаты могут не соответствовать порядку:
источник
Я попробовал здесь ответы в гигантском для ... если цикл, но не получил никакой радости - поэтому я сделал это так, может быть, грязно, но сделал работу:
хотя это добавило пробел к списку, что нормально - я хотел, чтобы он немного отступил. Также предположим, что «\ n» может быть напечатано в оригинальном $ EP_LIST.
источник
Еще одним полезным вариантом является труба для
tr
:echo "${my_array[@]}" | tr ' ' '\n'
Это выглядит просто и компактно
источник
my_array=( "one two" three )
4
+, пришлось использоватьecho "${my_array[@]}" | tr '' ' \n'
, хотя лично я бы избегалecho
такого использования , гдеtr
мой выбор, я думаю, что-то вроде этогоtr '' ' \n' <<<"${my_array[@]}"
может быть немного легче читать позже.