O que o operador '#' na frente de uma variável faz na expansão da variável?

8

abaixo é o código que eu executei no terminal

[root@idm ~]# x="$(date +%d%m%y)"    
[root@idm ~]# echo $x
270217
[root@idm ~]# echo ${#x}
6

Alguém pode me ajudar a entender por que a saída é 6 ? O que # faz essencialmente com a variável?

    
por Girish Sunkara 27.02.2017 / 05:06

2 respostas

21

É uma expansão de parâmetro que retorna o comprimento do parâmetro ou o número de elementos em uma matriz ou o número de parâmetros posicionais.

Por favor, leia o manual do seu shell. O seguinte é do manual bash :

${#parameter}

The length in characters of the value of parameter is substituted. If parameter is * or @, the value substituted is the number of positional parameters. If parameter is an array name subscripted by * or @, the value substituted is the number of elements in the array. If parameter is an indexed array name subscripted by a negative number, that number is interpreted as relative to one greater than the maximum index of parameter, so negative indices count back from the end of the array, and an index of -1 references the last element.

E também, por favor não tenha o hábito de trabalhar em um shell raiz interativo. É perigoso e imprudente na melhor das hipóteses. Use sudo com moderação e somente em situações que exijam privilégios elevados. Brincar com bash é algo que você definitivamente pode fazer como um usuário comum não-root.

Nos últimos anos, usei apenas um shell de raiz interativa para adicionar manualmente um único usuário para mim. É um trabalho de 2 minutos e então eu nunca preciso ver um prompt # novamente nessa máquina.

    
por 27.02.2017 / 08:30
13

O operador # retorna o tamanho de uma variável. No seu caso, a variável x length é seis.

Por favor, dê uma olhada em Substituição de Parâmetro para mais informações.

    
por 27.02.2017 / 05:13

Tags