Заполнение массива из вывода команды, кавычки определяют элементы

#bash

#bash

Вопрос:

Я хочу заполнить массив из вывода команды, сохранив кавычки вокруг элементов следующим образом:

 $ array1=("one.1 one.2" two)
$ echo ${array1[0]}
one.1 one.2
 

Но любой вывод команды дает другой результат, реплицируемый с echo помощью here:

 $ array1=($(echo '"one.1 one.2" two'))
$ echo ${array1[0]}
"one.1
 

Ответ №1:

Это можно решить с помощью eval :

 $ eval "array1=("$(echo '"one.1 one.2" two')")"
$ echo ${array1[0]}
one.1 one.2
 

Комментарии:

1. Спасибо, это работает! Я думал об использовании eval , но, видимо, я поместил его не в то место, например, непосредственно перед командой sub with echo . Это не сработало.

2. @srakitnican Полезный совет по использованию eval : вы создаете строку, которая будет выполнена позже, как будто она была вставлена непосредственно в скрипт. Если вы не уверены в построенной строке, просто замените eval на echo , и она будет показана.