Que fait l'opérateur '#' devant une variable dans l'expansion des variables?

12

ci-dessous est le code que j'ai exécuté dans le terminal

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

Quelqu'un peut-il m'aider à comprendre pourquoi la sortie est 6? Que fait #essentiellement la variable?

Girish Sunkara
la source

Réponses:

25

Il s'agit d'une extension de paramètre qui renvoie la longueur du paramètre, ou le nombre d'éléments dans un tableau, ou le nombre de paramètres positionnels.

Veuillez lire le manuel de votre shell. Ce qui suit est tiré du bashmanuel:

${#parameter}

La longueur en caractères de la valeur de parameterest substituée . Si parameterest *ou @, la valeur substituée est le nombre de paramètres positionnels. Si parameterest un nom de tableau indexé par *ou @, la valeur substituée est le nombre d'éléments dans le tableau. Si parameterest un nom de tableau indexé indexé par un nombre négatif, ce nombre est interprété comme relatif à un supérieur à l'index maximum du paramètre, donc les indices négatifs comptent à rebours à partir de la fin du tableau, et un index de -1 fait référence au dernier élément .


Et aussi, ne prenez pas l'habitude de travailler dans un shell racine interactif. C'est dangereux et téméraire au mieux. Utilisez sudoavec parcimonie et uniquement dans les situations qui nécessitent des privilèges élevés. Jouer avec bashest quelque chose que vous pouvez certainement faire en tant qu'utilisateur non root ordinaire.

Au cours des dernières années, je n'ai utilisé qu'un shell racine interactif pour ajouter manuellement un seul utilisateur pour moi. C'est un travail de 2 minutes et je n'ai plus besoin de revoir une #invite sur cette machine.

Kusalananda
la source
13

L' #opérateur renvoie la longueur d'une variable. Dans votre cas, la xlongueur variable est de six.

Veuillez consulter la Substitution de paramètres pour plus d'informations.

cerberus
la source