Добавление элементов в массив в BASH - PullRequest
1 голос
/ 07 марта 2020

Я ищу способ добавления элементов из определенного столбца в файле в массив, используя BASH. Столбцы разделены табуляцией, например:

Файл (test.txt) со значениями:

  1. Это мое имя 3
  2. Имя Рю
  3. Элемент списка
  4. Элемент списка 2b. et c et c

Я использую:

element=$(cat test.txt | awk -F'\t' '{print $2}' | sort -u)

arr=()

arr=+( "$element" )

Что, кажется, работает вплоть до добавления в массив. Когда я повторяю массив, он принимает «Это мое имя» как четыре отдельных элемента. Поэтому, когда я использую оператор select, он не распознает элементы целиком. то есть он возвращает список, такой как: 1. Это 2. является 3. моим 4. именем 5. Имя

Единственный способ, которым я могу думать, это использовать sed перед добавлением в массив, чтобы заменить пространство на например, подчеркивание, а затем удалить его на более позднем этапе. Однако если файл действительно содержит подчеркивание, это повлияет на него.

Я бы хотел, чтобы мое предложение select возвращало список, такой как:

  1. Это мое имя
  2. Name

Когда я перебираю массив, все элементы там. Однако, когда я использую команду select для создания меню с этими элементами, элементы с белым пространством считываются как отдельные элементы. cat мой массив дает Это мое имя Имя select x в массиве дает мне 1. Это 2. является 3. моим 4. именем 5. Имя

Мне нужна команда выбора, чтобы дать мне

1. Это мое имя

2. Имя

1 Ответ

1 голос
/ 07 марта 2020

Для этого есть специальный buildar readarray (mapfile)

readarray -t arr <test.txt
$ for item in "${arr[@]}"; { echo $item; }
1. This is my name 3
2. Name ryu
3. List item
4. List item 2b. etc etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...