Bash/KSH/SH Shell: Find The Length Of a String On a UNIX, Linux, BSD, and OS X

Posted on in Categories Linux, Shell scripting, UNIX last updated March 31, 2015

While writing a shell script you may want to find out the length of a string. While reading GNU expr command man page I found an interesting option as follows:

expr length STRING

For example display the length of “nixcraft” word/string, enter:

expr length "nixcraft"

OR set it as follows:

var="nixcraft"
expr "${var}" : '.*'

Sample outputs:

8

Finding length of string in bash

The syntax is as follows:

var="nixCraft"
l=${#var} 
echo "Length of string \"${var}\" is ${l}."

Sample outputs:

Length of string "nixCraft" is 8.

String length in ksh or older unix oses

You can use the wc command as follows:

## pass the -c option to wc to get the number of bytes in $domain variable ##
domain='www.cyberciti.biz'
echo -n "$domain" | wc -c

Sample outputs:

17

expr and POSIX

Please note that the expr command is not concerned with POSIX (open system standards based on Unix). You can try old good KSH/SH/Bash command as follows which should work with any UNIX-likeo operating systems such as FreeBSD, OpenBSD, Solaris, IBM AIX, HP-UX and more:

myVar="nixcraft"
echo "${#myVar}"

Sample outputs:

8

Another option is to use Perl or Python:

echo "What you seek is seeking you" | perl -nle ' print length '

Sample outputs:

28

23 comment

  1. hi i tried this program but its not working in my computer lab.
    kindly let me know what is wrong in the program
    echo enter the string
    read string
    length = ‘expr length $string’
    echo “length of the string is $length”

    output should come as
    eg:
    enter the string:Harshi
    length of the string is :6
    but in the lab its coming as
    enter the string :Harshi
    length command cannot be read
    please try to solve my problem
    thank you

    1. to hw,

      the correct code is:
      echo enter the string
      read string
      length=$(expr length “$string”)
      echo “length of the string is $length”

      You must redirect the output into the variable, otherwise it don’t read the value.
      Nice job.

    2. i dunno y it is not working .have u given the inverted commas and stuffs??
      this code worked for me..

      echo ” enter thestring”
      read str
      len=`expr length $str`
      echo “Length is $len”.

  2. I am trying to create a string that will allow me to set value a a particular position in the string.
    I am running a validation an have many for loops with various variable lengths being returned.
    I want the output to be formatted so that the status is lined up in the same postion.
    for example i check a list of files to see if they exist and I want to display an OK or FAILED in the output. I want the output to look like something below.
    /IDS

  3. sorry I didnt finish what I wanted to explain.
    I am trying to create a string that will allow me to set value a a particular position in the string.
    I am running a validation an have many for loops with various variable lengths being returned.
    I want the output to be formatted so that the status is lined up in the same postion.
    for example i check a list of directories to see if they exist and I want to display an OK or FAILED in the output. I want the output to look like something below.
    /IDS [ OK ]
    /VALID [ OK ]
    /DEVEL [FAILED]
    /PROGRAMS [ OK ]

    any help

    1. The command `expr length $var` is platform dependent.You can not run it in another platform rather than the Linux.But if you using the command `echo ${#var}`, you can run it in cross platform.

  4. More options :D

    myVar="nixcraft"
    echo ${#myVar}
    echo ${myVar} | awk ' { print length } '
    echo "${myVar}" | wc -c
    echo `expr length ${myVar}`
    1. # to find Even or Odd
      echo “Enter the A value”;
      read A
      if [ `expr $A % 2` -eq 0 ]
      then
      echo “Number is even”;
      else
      echo “Number is odd”;
      fi

  5. Hi All,

    I am looking for a script to compare the dates of two files to find out which one is newer.
    Taking the following files as reference:

    -rwxr-xr-x 1 vishy vishy 10088 Apr 26 11:08 file1
    -rwxrwxr-x 1 vishy vishy 3232 Feb 12 2009 file2

    We can see that for file1 the date and time(month date hrs:mins) is displayed, but for file2 month date and year is displayed.

    Can anyone please share a script to compare the dates of files of these kind?

    Regards,
    Vishy

  6. what is the code for generating the number of char for A and B for unix and I want the input of the user to be prompted every time a input is done (e.g. loop)

    So I would want te program to allow the user to repeatedly input a string of characters and produce the list of number of each character in the string and generate the percentage of each character in the string.

    Any suggestions.

  7. echo “enter 1se file name”
    read f1
    echo “enter 2nd fname”
    read f2
    if [ $f1 -nt -$f2 ]
    then
    echo ” $f1 is newer”
    else
    echo ” $f2 is newer”
    fi

  8. Just add this to your .bashrc:
    ——- cut ——-

    strlen() {
      str="$@"
      echo ${#str}
    }

    —— end cut ——
    Then all you need is:
    $ strlen This is some string
    19
    $ strlen "a"
    1

    ;]

  9. One previous suggestion was:

    echo "${myVar}" | wc -c

    However this includes the trailing character so the length is out by 1.

    Using a generic expr command you can get the length on almost any platform or shell:

    expr "${myVar}" : '.*'

Leave a Comment