Comprimento da string separado por espaços

0

Eu tenho essa variável em um script bash do Ubuntu e estou procurando extrair seu tamanho:

var_names='test1 tutorial2 test3w'

Em uma lista Python, eu poderia fazer len(var_names) e o resultado seria 3. Eu preciso fazer algo semelhante em um script bash - Eu preciso encontrar uma maneira de determinar o comprimento da string e para a resposta é 3 .

Minha tentativa:

Eu tentei converter isso em uma matriz e, em seguida, testar seu tamanho:

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

no entanto:

echo $arr

apenas dá

test1

Pergunta:

Como eu obtenho o tamanho dessa variável no bash, de modo que o tamanho retornado seja 3?

    
por W R 14.02.2017 / 03:28

2 respostas

2

Sua abordagem está correta, ${#arr[@]} fornecerá o número de elementos na matriz (neste caso, 3):

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

Você também pode retornar os comprimentos de string dos elementos individuais da matriz usando ${#arr[0]} , ${#arr[1]} e assim por diante:

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

O motivo pelo qual $arr retorna apenas o primeiro elemento test1 é que é equivalente a ${arr[0]} ; se você quiser retornar toda a matriz, você pode usar ${arr[@]} ou ${arr[*]} :

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

Veja a seção Arrays de man bash

    
por steeldriver 14.02.2017 / 04:38
0

Como você está efetivamente tentando encontrar o número de palavras na variável, você pode usar o comando wc -w para isso:

$ var_names='test1 tutorial2 test3w'                                                                                     

$ wc -w <<< "$var_names" 
3
    
por Sergiy Kolodyazhnyy 23.02.2017 / 20:06