Anuradha singh Anuradha singh - 7 months ago 20
Bash Question

What is meaning of '#' before a variable in shell script?

Can somebody please explain the what below piece of shell script would be doing?

END_POS=$((${#column}-$COLON_INDEX))

Answer

In this context, it stands for the the length of the value of that variable:

$ v="hello"
$ echo ${#v}
5

$ v="bye"
$ echo ${#v}
3

So what does this command?

END_POS=$((${#column}-$COLON_INDEX))

It gets the length of the value in $column and substracts the value in $COLON_INDEX using the $(( )) syntax to perform arithmetic operations:

$ column="hello"
$ colon_index=2
$ r=$((${#column}-$colon_index))   # len("hello") - 2 = 5 - 2
$ echo $r
3

From Arithmetic expression:

(( )) without the leading $ is not a standard sh feature. It comes from ksh and is only available in ksh, Bash and zsh. $(( )) substitution is allowed in the POSIX shell. As one would expect, the result of the arithmetic expression inside the $(( )) is substituted into the original command. Like for parameter substitution, arithmetic substitution is subject to word splitting so should be quoted to prevent it when in list contexts.