Команда терминала для вывода в формате CSV с двумя столбцами

Избегать цитирования желательно, когда мы хотим, чтобы оболочка думала: «О, это все отдельные элементы, а не одно целое!». Такая штука может быть весьма полезна с массивами.

bash-4.3$ var="one two three"
bash-4.3$ arr=( $var  )
bash-4.3$ for i in "${arr[@]}"; do echo "$i"; done
one
two
three

В частности, это полезно, когда вы создаете массив, как в примере выше. Я лично использовал такой подход при перечислении фактических адресов рабочих пространств Ubuntu (точная терминология - это окна просмотра, и они используют формат координат, такой как X, y, но это совсем другая история).

Другой подход - когда вы передаете переменную другой команде, которая должна обрабатывать их как отдельные элементы. Сравните:

bash-4.3$ bash -c 'for item; do echo $item; done' sh "$var"
one two three
bash-4.3$ bash -c 'for item; do echo $item; done' sh $var
one
two
three

Чтобы обратиться к тому, что было упомянуто в комментариях, эти примеры не предназначены для использования с «неожиданным вводом», а скорее для контролируемой среды. Кроме того, set noglob можно использовать, если нужно избежать подстановки, но опять же - если вы создаете массив для определенной комбинации строк, таких как числовые значения окон просмотра рабочего стола, опасности от нет. glog вообще. Если вы имеете дело с фактическим пользовательским вводом, то следует использовать кавычки, и это не то, что было темой этого вопроса.

2
18.10.2017, 12:57
0 ответов

Теги

Похожие вопросы