Co robi operator „#” przed zmienną w rozszerzaniu zmiennej?

12

poniżej znajduje się kod, który wykonałem w terminalu

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

Czy ktoś może mi pomóc zrozumieć, dlaczego wynik jest 6? Co #właściwie robi zmienna?

Girish Sunkara
źródło

Odpowiedzi:

25

Jest to rozwinięcie parametru, które zwraca długość parametru, liczbę elementów w tablicy lub liczbę parametrów pozycyjnych.

Przeczytaj instrukcję obsługi swojej powłoki. Z bashinstrukcji wynika :

${#parameter}

Długość w znakach wartości parameterjest podstawiana . Jeśli parameterjest *lub @, podstawiona wartość to liczba parametrów pozycyjnych. Jeśli parameternazwa tablicy jest subskrybowana przez *lub @, podstawiona wartość to liczba elementów w tablicy. Jeśli parameterjest to indeksowana nazwa tablicy indeksowana liczbą ujemną, liczba ta jest interpretowana jako względna do jednego większego niż maksymalny indeks parametru, więc indeksy ujemne liczą się od końca tablicy, a indeks -1 odwołuje się do ostatniego elementu .


Ponadto, proszę nie nawykaj pracy w interaktywnej powłoce root. W najlepszym razie jest to niebezpieczne i lekkomyślne. Używaj sudooszczędnie i tylko w sytuacjach wymagających podwyższonych uprawnień. Zabawa z bashczymś, co zdecydowanie możesz zrobić jako zwykły użytkownik inny niż root.

W ciągu ostatnich kilku lat używałem tylko interaktywnej powłoki roota do ręcznego dodawania jednego użytkownika dla siebie. To 2-minutowa robota, a potem już nigdy więcej nie muszę wyświetlać #monitu na tym komputerze.

Kusalananda
źródło
13

#Operator zwraca długość zmienną. W twoim przypadku zmienna xdługość wynosi sześć.

Aby uzyskać więcej informacji, zajrzyj do Zastępowanie parametrów .

cerberus
źródło