Что делает оператор «#» перед переменной при расширении переменной?


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- то, что вы определенно можете сделать как обычный пользователь без полномочий root.

В последние несколько лет я использовал только интерактивную корневую оболочку для ручного добавления одного пользователя для себя. Это 2-минутная работа, и мне больше никогда не нужно видеть #подсказку на этой машине.


13

#Оператор возвращает длину переменной. В вашем случае переменная xдлина составляет шесть.

Пожалуйста, посмотрите на Подстановку параметров для получения дополнительной информации.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.