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

12

abaixo está 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 está #essencialmente fazendo com a variável?

Girish Sunkara
fonte

Respostas:

25

É 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 bashmanual:

${#parameter}

O comprimento em caracteres do valor de parameteré substituído . Se parameterfor *ou @, o valor substituído é o número de parâmetros posicionais. Se parameteré um nome de matriz inscrito por *ou @, o valor substituído é o número de elementos na matriz. Se parameteré um nome de matriz indexado inscrito por um número negativo, esse número é interpretado como relativo a um maior que o índice máximo do parâmetro, portanto, os índices negativos são contados a partir do final da matriz, e um índice de -1 faz referência ao último elemento .


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

Nos últimos anos, usei apenas um shell raiz interativo para adicionar manualmente um único usuário para mim. É um trabalho de 2 minutos e nunca mais preciso receber um #aviso nessa máquina.

Kusalananda
fonte
13

O #operador retorna o comprimento de uma variável. No seu caso, o xcomprimento variável é seis.

Consulte a Substituição de parâmetros para obter mais informações.

cerberus
fonte