Length of string separated by spaces

I have this variable in an Ubuntu bash script and I am looking to extract its length:

var_names='test1 tutorial2 test3w'

In a Python list, I could do len(var_names) and the result would be 3. I need to do something similar in a bash script - I need to find a way to determine the length of the string and for the answer to be 3.

My attempt:

I tried to convert this into an array an then test its length:

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

however:

echo $arr

only gives

test1

Question:

Howe do I get the length of this variable in bash, such that the returned length is 3?

4

2 Answers

Your approach is correct,${#arr[@]} will give you the number of elements in the array (in this case, 3):

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

You can also return the string lengths of the individual array elements using ${#arr[0]}, ${#arr[1]} and so on:

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

The reason that $arr returns only the first element test1 is that it is equivalent to ${arr[0]}; if you want to return the whole array, you can use either ${arr[@]} or ${arr[*]}:

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

See the Arrays section of man bash

1

Since you are effectively trying to find number of words in the variable, you can use wc -w command for that:

$ var_names='test1 tutorial2 test3w'
$ wc -w <<< "$var_names"
3

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like