Как конвертировать строку в текстовом файле в массив в Bash - PullRequest
0 голосов
/ 20 июня 2019

У меня есть текстовый файл, содержащий кавычки внутри одинарных кавычек.Они "не" одни лайнеры.Например, в одной строке может быть две кавычки, но все кавычки находятся внутри одинарных кавычек, таких как

'hello world' 'this is the second quotes' 'and this is the third quoted text'

. Как я могу создать массив и сделать каждый текст в кавычках элементом массива.Я пытался использовать

declare -a arr=($(cat file.txt))

, но это разделяет пространство.присваивает каждому слову элемент в массиве

1 Ответ

1 голос
/ 21 июня 2019

Если у вас bash v4.4 или новее, вы можете использовать xargs, чтобы проанализировать строки в кавычках и превратить их в строки, разделенные нулем, а затем readarray, чтобы превратить это в массив bash:

readarray -t -d '' arr < <(xargs printf '%s\0' <file.txt)

Если у вас более старая версия bash, вам нужно будет создать массив поэлементно:

arr=( )
while IFS= read -r -d '' quote; do
  arr+=( "$quote" )
done < <(xargs printf '%s\0' <file.txt)

Обратите внимание, что синтаксис xargs quote немного отличается от всего остального(конечно).Он допускает как одинарные, так и двойные кавычки, но не допускает экранированные кавычки в этих строках.И это, вероятно, немного варьируется между версиями xargs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...