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?

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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.