2017-01-26 3 views
1

Если у меня есть переменная с несколькими строковыми элементами, разделенными пробелами, можно ли получить элемент, указав индекс? Нечто похожее на массивы ?:Можно ли получить элемент из строковой переменной по индексу?

my_var="string1 string2 string3 string4" 
echo $[my_var[3]] # this does not work 
+0

Используйте массив для этого. – codeforester

ответ

2

Вы используете ... массив.

$ my_var=("string1" "string2" "string3" "string4") 
$ echo "${my_var[3]}" 
string4 

Однако, возможно, вы спрашиваете, учитывая исходную строку, можете ли вы разбить ее на массив?

$ read -a arr <<< "$my_var" 

Это работает, но только если каждые пространства в строке должны рассматриваться в качестве разделителя. Вы не можете процитировать некоторых, чтобы относиться к буквальному пространству; поэтому на первом месте были добавлены массивы.

Возможно, вам повезло, и ваша строка использует другой разделитель, например. запятая, в этом случае вы можете установить значение IFS:

IFS=, read -r -a arr <<< "$my_str" 

, но в целом, строки-а-листы непрочны.

1

Вы можете сохранить его с помощью команды read с настройкой разделителя ввода-вывода соответствующим образом. Это не важно для вашего текущего ввода, поскольку по умолчанию IFS обрабатывает одиночный символ пробела между словами.

IFS=' ' read -ra inputArray <<<"$my_var" 

Установка IFS=' ' необязателен здесь, добавил он, чтобы подчеркнуть необходимость его использования при разбиении строки, содержащие другие ДЭ-ограничители.

и доступа к отдельным элементам, как

printf "%s\n" "${inputArray[0]}" 
string1 
0

Если вы хотите, третье слово, вы можете использовать

cut -d" " -f3 <<< ${my_var} 
Смежные вопросы