Como encontrar o comprimento da string no shell

3

eu preciso calculá-lo usando apenas shell sh puro. O que está acontecendo é / bin / sh é na verdade um link para o bash ou outro shell.Hence $ {# STRING} fornece o tamanho da string, já que é um recurso bash avançado. Alguém pode me dizer como eu posso encontrar o comprimento da corda. Estou usando a arquitetura solaris 5.10 sparc

    
por Niraj 05.09.2014 / 08:02

8 respostas

6

wc -m conta 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 sinalizador -n para o eco impede que ele imprima uma nova linha. O sinalizador pode ser diferente no Solaris 5. Verifique man echo

    
por 05.09.2014 / 08:11
6

Aqui estão algumas maneiras de fazer isso.

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

Ou

expr length "${myvar}"
14
    
por 05.09.2014 / 13:59
2

Aqui estão algumas maneiras:

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

link

    
por 05.10.2017 / 20:12
1

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

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

( expr é POSIX). Ou se você não tiver expr (o Solaris 5.1 é antigo), você também pode usar wc junto com printf como:

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

Apenas não tente usar echo , porque o echo adicionará novas linhas e não há uma maneira padrão de suprimi-lo.

Observe que wc -m conta caracteres e wc -c contagens bytes se houver diferença na localidade atual.

    
por 05.09.2014 / 08:14
1

Usar ${#string} para obter o comprimento de $string é uma expansão de parâmetro de shell POSIX . Não é um recurso bash -only.

No Solaris 5.10, se /bin/sh ou /usr/bin/sh (como mencionado na sh(1) não suporta isto, então /usr/xpg4/bin/sh irá.

Para obter o comportamento POSIX em um sistema Solaris 5.10, seu PATH deve ser definido como

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

(nessa ordem), conforme descrito no standards(5) manual .

    
por 08.04.2018 / 10:54
0

set var="test test test";

echo $%var;

14

    
por 21.02.2018 / 09:31
0

(Embora já existam muitas respostas, mas parece que elas não são tão intuitivas, então eu adicionaria uma para deixar claro à primeira vista)

Se você quer apenas fazer isso na linha de comando (bash) (ou até no script) .

Você pode usar uma das seguintes formas:

  • Use echo -n e wc -m
  • Use printf e wc -m

por exemplo

# 5
echo -n hello | wc -m

# 11
echo -n "hello world" | wc -m

# 5
printf "hello" | wc -m

# 11
printf "hello world" | wc -m

# 11
printf "hello %s" world | wc -m

Dicas:

  • Por padrão, echo adicionará uma nova linha no final, portanto, a opção -n é necessária para evitar isso.
  • Se houver espaço entre a string de entrada, então deverá citá-la.
por 15.08.2018 / 02:46
-1

Você pode fazer isso de forma bastante simples em python

>>> len('hello world')
11
    
por 25.07.2018 / 10:16