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 -c
或wc --bytes
字节=用2,3或更多字节计算Unicode字符。 -
wc -m
或wc --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)
你不需要脚本。