Comprimento do argumento dentro de uma função de um script sh

4

Eu tenho um servidor FreeBSD 9.3 RELEASE e estou tentando escrever um script de shell usando sh . Eu estou tentando obter o comprimento de uma variável que é passada para uma função em um script de shell, da seguinte forma:

#!/bin/sh

myfunc() {
  varlength=${#1}
  echo $varlength
}

test="aaaaa aaaaa"
myfunc $test

O script acima deve retornar 11, que é o tamanho da variável de teste, mas o $ {# 1} não parece funcionar. Eu também tentei muitas outras maneiras de conseguir isso, mas eu não consigo descobrir isso.

varlength=$(expr ${#1})  does not work
varlength=$(${#1})  does not work
varlength=$(expr \( "X$1" : ".*" \) - 1)  does not work
varlength=$({#1})  does not work

e muitas outras tentativas que fiz falharam.

    
por Zerotronic Zerotronicus 30.09.2014 / 22:26

1 resposta

8

porque $test contém espaço em branco quando você diz

myfunc $test # without quotes

sua função recebe > 1 argumento. myfunc recebe 2 argumentos aqui, aaaaa e aaaaa .

Você quer isso:

myfunc "$test" # with quotes

Regra geral: sempre cite seu "$variables" , a menos que você saiba exatamente quando e por que não.

    
por 30.09.2014 / 22:58