bash中string的长度

你如何获得存储在variables中的string长度并将其分配给另一个variables?

myvar="some string" echo ${#myvar} # 11 

你如何设置另一个variables到输出11

UTF-8string长度

除了fedorqui的正确答案 ,我想显示string长度和字节长度之间的区别:

 myvar='Généralités' chrlen=${#myvar} oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#myvar} LANG=$oLang LC_ALL=$oLcAll printf "%s is %d char len, but %d bytes len.\n" "${myvar}" $chrlen $bytlen 

将呈现:

 Généralités is 11 char len, but 14 bytes len. 

你甚至可以看看存储的字符:

 myvar='Généralités' chrlen=${#myvar} oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#myvar} printf -v myreal "%q" "$myvar" LANG=$oLang LC_ALL=$oLcAll printf "%s has %d chars, %d bytes: (%s).\n" "${myvar}" $chrlen $bytlen "$myreal" 

会回答:

 Généralités has 11 chars, 14 bytes: ($'G\303\251n\303\251ralit\303\251s'). 

Nota:根据Isabell Cowan的评论 ,我已经将设置和$LANG一起添加到$LC_ALL

参数的长度

参数与常规variables相同

 strLen() { local bytlen sreal oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#1} printf -v sreal %q "$1" LANG=$oLang LC_ALL=$oLcAll printf "String '%s' is %d bytes, but %d chars len: %s.\n" "$1" $bytlen ${#1} "$sreal" } 

将工作

 strLen théorème String 'théorème' is 10 bytes, but 8 chars len: $'th\303\251or\303\250me' 

有用的printf校正工具:

 strU8DiffLen () { local bytlen oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#1} LANG=$oLang LC_ALL=$oLcAll return $(( bytlen - ${#1} )) } 

那么现在:

 for word in Généralités Language Théorème Février ;do strU8DiffLen $word printf "%-$((12+$?))s %2d more byte / %3d chars \n" "$word" $? ${#word} done Généralités 3 more byte / 11 chars Language 0 more byte / 8 chars Théorème 2 more byte / 8 chars Février 1 more byte / 7 chars 

要获取存储在variables中的string的长度,请说:

 myvar="some string" size=${#myvar} 

要确认它已妥善保存,请echo一下:

 $ echo "$size" 11 

您可以使用:

 MYSTRING="abc123" MYLENGTH=$(printf "%s" "$MYSTRING" | wc -c) 
  • 用于字节计数的wc -cwc --bytes字节=用2,3或更多字节计算Unicode字符。
  • wc -mwc --chars字符计数= Unicode字符被统计为单个直到他们使用更多的字节。

如果你想在命令行或函数参数中使用它,请确保使用size=${#1}而不是size=${#$1} 。 第二个可能更直观,但语法不正确。

在回复开始后:

如果你想用这个命令行或函数参数…

与代码:

 size=${#1} 

可能有这种情况,你只是想检查一个零长度的参数,并不需要存储一个variables。 我相信你可以使用这种语法:

 if [ -z $1 ]; then #zero length argument else fi 

请参阅GNU和wooledge以获得更完整的Bash条件expression式列表。

这里有几种方法来计算variables的长度:

 echo ${#VAR} echo -n $VAR | wc -m echo -n $VAR | wc -c printf $VAR | wc -m expr length $VAR expr $VAR : '.*' 

并将结果设置为另一个variables,只需将上面的命令分配给另一个variables,如下所示:

 otherVar=`echo -n $VAR | wc -m` echo $otherVar 

http://techopsbook.blogspot.in/2017/09/how-to-find-length-of-string-variable.html

我想要最简单的情况,最后这是一个结果:

 echo -n 'Tell me the length of this sentence.' | wc -m; 36 

我会用这样的东西:

 var2=$(echo $myvar | wc -c) 

你不需要脚本。