Cosa fa l'operatore '#' davanti a una variabile in espansione variabile?


12

sotto è il codice che ho eseguito nel terminale

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

Qualcuno può aiutarmi a capire perché l'output è 6? Cosa sta #essenzialmente facendo alla variabile?

Risposte:


25

È un'espansione del parametro che restituisce la lunghezza del parametro o il numero di elementi in un array o il numero di parametri posizionali.

Si prega di leggere il manuale della shell. Quanto segue è dal bashmanuale:

${#parameter}

parameterViene sostituita la lunghezza in caratteri del valore di . Se parameterè *o @, il valore sostituito è il numero di parametri posizionali. Se parameterè un nome di array sottoscritto da *o @, il valore sostituito è il numero di elementi nell'array. Se parameterè un nome di array indicizzato sottoscritto da un numero negativo, quel numero viene interpretato come relativo a uno maggiore dell'indice massimo del parametro, quindi gli indici negativi contano alla fine dell'array e un indice -1 fa riferimento all'ultimo elemento .


Inoltre, ti preghiamo di non prendere l'abitudine di lavorare in una shell root interattiva. È pericoloso e spericolato nella migliore delle ipotesi. Utilizzare sudocon parsimonia e solo in situazioni che richiedono privilegi elevati. Giocare con te bashè qualcosa che puoi sicuramente fare come un normale utente non root.

Negli ultimi anni, ho usato solo una shell root interattiva per aggiungere manualmente un singolo utente per me stesso. È un lavoro di 2 minuti e quindi non ho mai più bisogno di vedere un #prompt su quella macchina.


13

L' #operatore restituisce la lunghezza di una variabile. Nel tuo caso la xlunghezza variabile è sei.

Per ulteriori informazioni, consultare Sostituzione parametri .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.