Was macht der Operator '#' vor einer Variablen bei der Variablenerweiterung?


12

Unten ist der Code, den ich im Terminal ausgeführt habe

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

Kann mir jemand helfen zu verstehen, warum die Ausgabe ist 6? Was macht im #Wesentlichen mit der Variablen?

Antworten:


25

Es handelt sich um eine Parametererweiterung, die die Länge des Parameters oder die Anzahl der Elemente in einem Array oder die Anzahl der Positionsparameter zurückgibt.

Bitte lesen Sie das Handbuch Ihrer Shell. Folgendes stammt aus dem bashHandbuch:

${#parameter}

Die Länge in Zeichen des Werts von parameterwird ersetzt . Wenn parameterist *oder @, ist der ersetzte Wert die Anzahl der Positionsparameter. Wenn parameterein Array-Name durch *oder tiefgestellt ist, wird durch @den ersetzten Wert die Anzahl der Elemente im Array ersetzt. Wenn parameteres sich um einen indizierten Array-Namen handelt, der durch eine negative Zahl gekennzeichnet ist, wird diese Zahl als relativ zu einem Wert interpretiert, der größer als der maximale Parameterindex ist, sodass negative Indizes vom Ende des Arrays zurückzählen und ein Index von -1 auf das letzte Element verweist .


Und auch, bitte machen Sie nicht eine Gewohnheit , in einer interaktiven Root - Shell zu arbeiten. Es ist bestenfalls gefährlich und rücksichtslos. Verwenden Sie es sudosparsam und nur in Situationen, in denen erhöhte Berechtigungen erforderlich sind. Das Herumspielen bashist etwas, das Sie als gewöhnlicher Nicht-Root-Benutzer definitiv tun können.

In den letzten Jahren habe ich nur eine interaktive Root-Shell verwendet, um manuell einen einzelnen Benutzer für mich hinzuzufügen. Es ist ein 2-Minuten - Job und dann habe ich nie brauche ein , um zu sehen #prompt immer wieder auf dieser Maschine.


13

Der #Operator gibt die Länge einer Variablen zurück. In Ihrem Fall xbeträgt die variable Länge sechs.

Bitte verwenden Sie einen Blick auf haben Parameter Substitution für weitere Informationen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.