Какова история ${#} в 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 4

1 ответ:

${#var} Обычно длина в символах ${var}. Так что ${#1000000000000000000} - это длина 1000000000000000000-го аргумента скрипта. Поскольку ваш сценарий не вызывался с таким количеством аргументов, это ноль.

Очевидно, существует ограничение на количество позиционных параметров, и когда вы пытаетесь сослаться на параметр за пределами этого, результаты непредсказуемы и варьируются от системы к системе. Разделительная линия, по-видимому, ${#9223372036854775808}, которая является 264.