LINUX.ORG.RU

Прошу объяснить причуду мака

 ,


0

2

ОС - MAC.

Задача: в mkvtoolnix нужно на полном автопилоте собрать сериал, при том так, чтобы название серии обязательно попало в поле титул.

По идее, решается это просто: переменная-массив, каждый элемент которого содержит имя серии, а индекс в массиве совпадает с порядковым номером серии. Но вот как себя ведёт bash в маке:

~$ for i in 0{1..9} {10..26} ; do names[$i]="s/d" ; echo ${names[$i]} ; done
s/d
s/d
s/d
s/d
s/d
s/d
s/d
-bash: 08: value too great for base (error token is "08")

~$  a=(1 2 3 4 5 6 7 8 9 10)
~$  echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
~$ echo ${#a[@]}
10
~$  echo ${a[8]}
9
~$  echo ${a[08]}
-bash: 08: value too great for base (error token is "08")
~$  echo ${a[09]}
-bash: 09: value too great for base (error token is "09")
~$  echo ${a[9]}
10
Как после такого понимать слоган «Думай иначе»? Или это я в чём-то накосячил? Помогите понять что не так, и почему простой и рабочий код не фурычит в маке...

★★

Построчно вбил все команды на gentoo, все выводы совпали с твоими.
Ты что-то делаешь не так.

v9lij ★★★★★
()

Поставь баш из homebrew. Из коробки он древнючий из-за лицензии.

Oxdeadbeef ★★★
()

мимо проходил

08 и 09 - числа, которые начинаются с нуля. Это значит восьмеричная система. Так же как \0xff это в шестнадцатеричной. Но 8 и 9 недопустимые цифры для восьмеричной системы, потому что в ней есть цифры от 0 до 7. Поэтому баш ругается. Пиши «8» и «9» или «010» и «011», если очень хочется, чтобы с ноликом.

sholom
()

Про систему счисления сказали, ноль можно резать с помощью #, ещё можно не извращаться с нулём в диапазоне:

$ for i in {01..12} ; do names[${i#0}]="s/d" ; echo $i ${i#0} ${names[${i#0}]} ; done
01 1 s/d
02 2 s/d
03 3 s/d
04 4 s/d
05 5 s/d
06 6 s/d
07 7 s/d
08 8 s/d
09 9 s/d
10 10 s/d
11 11 s/d
12 12 s/d

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

>можно не извращаться с нулём в диапазоне

Искренне благодарю тебя, человечище! Я когда-то знал про эту форму записи, но как-то забыл...

zzdnx ★★
() автор топика

08 09

Ты в курсе, что в восьмеричной системе не бывает 8 и 9? ;)

TL;DR: если число начинается с 0x — то это шестнадцатиричное число, если с 0 — то восьмеричное.

beastie ★★★★★
()
Ответ на: комментарий от beastie

>Ты в курсе?

Я просто смог это забыть.

zzdnx ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.