Какова история ${#} в bash
Я столкнулся с манипуляцией длиной строки в bash 4.1.2 для двух строк
Первый: 1000000000000000000
developer@kernel ~> echo ${#1000000000000000000}
0
developer@kernel ~> s1=1000000000000000000
developer@kernel ~> echo ${#s1}
19
Второе: 10000000000000000000
developer@kernel ~> echo ${#10000000000000000000}
19
developer@kernel ~> s2=10000000000000000000
developer@kernel ~> echo ${#s2}
20
Как объяснить странное такое поведение?
1 ответ:
Очевидно, существует ограничение на количество позиционных параметров, и когда вы пытаетесь сослаться на параметр за пределами этого, результаты непредсказуемы и варьируются от системы к системе. Разделительная линия, по-видимому,
${#var}
Обычно длина в символах${var}
. Так что${#1000000000000000000}
- это длина 1000000000000000000-го аргумента скрипта. Поскольку ваш сценарий не вызывался с таким количеством аргументов, это ноль.${#9223372036854775808}
, которая является 264.