Como encontrar o comprimento da string no shell

Como encontrar o comprimento da string no shell

Preciso calcular o comprimento de uma string usando apenas sh shell puro. O que está acontecendo é que /bin/shna verdade é um link direto para o bash ou outro shell. Conseqüentemente, ${#STRING}fornece o comprimento da string, pois é um recurso avançado do bash.

Alguém pode me dizer como posso encontrar o comprimento da string? Estou usando a arquitetura Solaris 5.10 Sparc

Responder1

wc -mconta os caracteres em uma string. Então você pode fazer algo como:

STRLENGTH=$(echo -n $STRING | wc -m)

Sintaxe alternativa:

STRLENGTH=`echo -n $STRING | wc -m`

O -nsinalizador para echo impede que ele imprima uma nova linha. A bandeira pode ser diferente no Solaris 5. Verifiqueman echo

Responder2

Aqui estão algumas maneiras de fazer isso.

myvar="This is a test"
echo "${#myvar}"
14

Ou

expr length "${myvar}"
14

Responder3

Usar ${#string}para obter o comprimento de $stringéuma expansão de parâmetro shell POSIX. Não é um bashrecurso exclusivo.

No Solaris 5.10, se /bin/shou /usr/bin/sh(conforme mencionado nosh(1)manual) não suporta isso, então /usr/xpg4/bin/sho fará.

Para obter o comportamento POSIX em um sistema Solaris 5.10, você PATHdeve estar definido como

/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin

(nessa ordem), conforme descrito nostandards(5)manual.

Responder4

Eu não acho que "puro sh" possa fazer isso. Mas você não precisa fazer nada em "puro sh"; você precisa fazer isso em sh plus utilitários padrão. A maneira mais direta é:

strlength=`expr "$string" : ".*"`

(expressãoé POSIX). Ou se não tiver expr(Solaris 5.1 é antigo), você também pode usarBanheirojunto comimprimircomo:

strlength=`printf "%s" "$string" | wc -m`

Só não tente usar echo, porque echo adicionará novas linhas ao final e não há uma maneira padrão de suprimi-las.

Observe que wc -mconta caracteres e wc -cconta bytes se houver uma diferença na localidade atual.

informação relacionada