Що робить оператор "#" перед змінною в розширенні змінної?


12

нижче - код, який я виконав у терміналі

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

Чи може хтось допомогти мені зрозуміти, чому вихід 6? Що #по суті робиться зі змінною?

Відповіді:


25

Це розширення параметра, яке повертає довжину параметра, або кількість елементів у масиві, або кількість позиційних параметрів.

Прочитайте посібник з оболонки. Далі йде bashпосібник:

${#parameter}

Довжина в символах значення " parameterпідмінена" . Якщо parameterє *або @, заміщене значення - це кількість позиційних параметрів. Якщо parameterім'я масиву підписано *або @, заміщене значення - це кількість елементів у масиві. Якщо parameterім'я індексованого масиву, підписане негативним числом, це число інтерпретується як відносний до одного, що перевищує максимальний індекс параметра, тому від'ємні індекси підраховуються з кінця масиву, а індекс -1 посилається на останній елемент .


А також, будь ласка , не змушуйте працювати в інтерактивній кореневій оболонці. Це в кращому випадку небезпечно і необачно. Використовуйте sudoекономно та лише у ситуаціях, де потрібні підвищені привілеї. Граючи з bashвами - це те, що ви, безумовно, можете зробити як звичайний користувач, який не має коренів.

В останні кілька років я використовував лише інтерактивну кореневу оболонку для ручного додавання єдиного користувача для себе. Це 2-хвилинна робота, і тоді мені більше ніколи не потрібно бачити #підказку на цій машині.


13

#Оператор повертає довжину змінної. У вашому випадку змінна xдовжина становить шість.

Будь ласка, перегляньте параметр Заміна для отримання додаткової інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.