¿Qué hace el operador '#' frente a una variable en la expansión de variables?

12

a continuación se muestra el código que ejecuté en la terminal

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

¿Alguien puede ayudarme a entender por qué la salida es 6? ¿Qué le está #haciendo esencialmente a la variable?

Sunkara girish
fuente

Respuestas:

25

Es una expansión de parámetros que devuelve la longitud del parámetro, o el número de elementos en una matriz, o el número de parámetros posicionales.

Por favor lea el manual de su shell. Lo siguiente es del bashmanual:

${#parameter}

La longitud en caracteres del valor de parameterse sustituye . Si parameteres *o @, el valor sustituido es el número de parámetros posicionales. Si parameteres un nombre de matriz suscrito por *o @, el valor reemplazado es el número de elementos en la matriz. Si parameteres un nombre de matriz indexado suscrito por un número negativo, ese número se interpreta como relativo a uno mayor que el índice máximo del parámetro, por lo que los índices negativos cuentan desde el final de la matriz, y un índice de -1 hace referencia al último elemento .


Y también, por favor , no tenga la costumbre de trabajar en un shell raíz interactivo. Es peligroso e imprudente en el mejor de los casos. Úselo con sudomoderación y solo en situaciones que requieran privilegios elevados. Jugar con él bashes algo que definitivamente puedes hacer como un usuario común no root.

En los últimos años, solo he usado un shell raíz interactivo para agregar manualmente un solo usuario para mí. Es un trabajo de 2 minutos y luego nunca más necesito ver un #aviso en esa máquina.

Kusalananda
fuente
13

El #operador devuelve la longitud de una variable. En su caso, la xlongitud variable es seis.

Por favor, eche un vistazo a la sustitución de parámetros para obtener más información.

cerbero
fuente