Длина строки разделяется пробелами

У меня есть эта переменная в сценарии удара Ubuntu, и я надеюсь извлекать его длину:

var_names='test1 tutorial2 test3w'

В списке Python я мог сделать len(var_names) и результат был бы 3. Я должен сделать что-то подобное в сценарии удара - я должен найти способ определить длину строки и для ответа, чтобы быть 3.

Моя попытка:

Я пытался преобразовать это в массив затем тест его длина:

arr=($var_names)
echo ${#arr[@]}

однако:

echo $arr

только дает

test1

Вопрос:

Howe я получаю длину этой переменной в ударе, таком, что возвращенная длина равняется 3?

0
задан 14 February 2017 в 05:28

2 ответа

Ваш подход корректен,${#arr[@]} даст Вам число элементов в массиве (в этом случае, 3):

$ var_names='test1 tutorial2 test3w'
$ arr=($var_names)
$ echo ${#arr[@]}
3

Можно также возвратить длины строки использования отдельных элементов массива ${#arr[0]}, ${#arr[1]} и так далее:

$ echo "${#arr[0]}"
5
$ echo "${#arr[1]}"
9
$ echo "${#arr[2]}"
6

Причина это $arr возвраты только первый элемент test1 это, это эквивалентно ${arr[0]}; если Вы хотите возвратить целый массив, можно использовать также ${arr[@]} или ${arr[*]}:

echo "${arr[@]}"
test1 tutorial2 test3w

Посмотрите Arrays раздел man bash

2
ответ дан 27 September 2019 в 11:56

Так как Вы эффективно пытаетесь найти количество слов в переменной, можно использовать wc -w команда для этого:

$ var_names='test1 tutorial2 test3w'                                                                                     

$ wc -w <<< "$var_names" 
3
0
ответ дан 27 September 2019 в 11:56

Другие вопросы по тегам:

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