【求助】BASH中得到一个字符串的长度?

【求助】BASH中得到一个字符串的长度?

如题。怎样得到一个字符串的长度呀,还有
str="123456"
flag=${str:7:1}
为什么我在test -n $flag
返回是真呀。并且在test-z $flag返回也是真
这个是怎么回事呀?      
复制内容到剪贴板
代码:
[color=blue]-(user@host:tty)-(tmp)-
[18727 0] %[/color] str=123456
[color=blue]-(user@host:tty)-(tmp)-
[18727 0] %[/color] echo length=${#str}
length=6
[color=blue]-(user@host:tty)-(tmp)-
[18727 0] %[/color] flag=${str:7:1}
[color=blue]-(user@host:tty)-(tmp)-
[18727 0] %[/color] test -n "$flag" ; echo $?
1
[color=blue]-(user@host:tty)-(tmp)-
[18727 0] %[/color] test -z "$flag" ; echo $?
0
[color=blue]-(user@host:tty)-(tmp)-
[18727 0] %[/color]
      
搞定了,谢了,原来前面加一个#就可以了,不过,为什么网上介绍的都是AWK呢。
第二个问题,我忘了加引号。在变量两边都加上引号就OK了。      
${#varname}