首页 文章

bash中字符串的长度

提问于
浏览
316

如何获取存储在变量中的字符串的长度并将其分配给另一个变量?

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

如何将另一个变量设置为输出 11

10 回答

  • 13

    UTF-8字符串长度

    除了fedorqui's correct answer之外,我想展示字符串长度和字节长度之间的区别:

    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's comment,我已将设置添加到 $LC_ALL 以及 $LANG .

    参数的长度

    参数与常规变量相同

    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修正工具:

    如果你:

    for string in Généralités Language Théorème Février  "Left: ←" "Yin Yang ☯";do
        printf " - %-14s is %2d char length\n" "'$string'"  ${#string}
    done
    
     - 'Généralités' is 11 char length
     - 'Language'     is  8 char length
     - 'Théorème'   is  8 char length
     - 'Février'     is  7 char length
     - 'Left: ←'    is  7 char length
     - 'Yin Yang ☯' is 10 char length
    

    不是很漂亮......为此,有一点功能:

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

    那么现在:

    for string in Généralités Language Théorème Février  "Left: ←" "Yin Yang ☯";do
        strU8DiffLen "$string"
        printf " - %-$((14+$?))s is %2d chars length, but use %2d bytes\n" \
            "'$string'" ${#string} $((${#string}+$?))
      done 
    
     - 'Généralités'  is 11 chars length, but use 14 bytes
     - 'Language'     is  8 chars length, but use  8 bytes
     - 'Théorème'     is  8 chars length, but use 10 bytes
     - 'Février'      is  7 chars length, but use  8 bytes
     - 'Left: ←'      is  7 chars length, but use  9 bytes
     - 'Yin Yang ☯'   is 10 chars length, but use 12 bytes
    
  • 1

    要获取存储在变量中的字符串的长度,请说:

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

    要确认它已正确保存, echo

    $ echo "$size"
    11
    
  • 178

    您可以使用:

    MYSTRING="abc123"
    MYLENGTH=$(printf "%s" "$MYSTRING" | wc -c)
    
    • wc -cwc --bytes 用于字节计数= Unicode字符计数为2,3或更多字节 .

    • wc -mwc --chars 用于字符计数= Unicode字符计数为单,直到它们使用更多字节 .

  • 8

    如果要将其与命令行或函数参数一起使用,请确保使用 size=${#1} 而不是 size=${#$1} . 第二个可能更本能,但语法不正确 .

  • 393

    作为对帖子开始的回应:

    如果要在命令行或函数参数中使用它...

    用代码:

    size=${#1}
    

    可能存在这样的情况:您只想检查零长度参数并且不需要存储变量 . 我相信你可以使用这种语法:

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

    有关Bash条件表达式的更完整列表,请参见GNUwooledge .

  • 5

    以下是计算变量长度的几种方法:

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

    并将结果设置在另一个变量中,只需将带有反引号的上述命令分配给另一个变量,如下所示:

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

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

  • 6

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

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

    我试图做类似的事情,但我只是想确保用户输入不是太长 .

    if [ ${#string} -ge 12 ]; then 
        echo ">= 12 characters. too long"
        exit
    else 
        echo "under 12 characters, not too long."
    fi
    
  • 17

    使用提供的示例

    #KISS (Keep it simple stupid)
    size=${#myvar}
    echo $size
    
  • 5

    我会用这样的东西:

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

    您不需要脚本 .

相关问题