Здравствуйте!
То ли от долгого сидения за черным экраном, то ли из-за недостатка знаний не могу выполнить простейшую арифметическую операцию - сложить переменную с числом. Вот скрипт:
[root@gtw new_router]# cat 1.sh
#!/bin/bashtmp="07"
echo "1. tmp + 1 = $[ $tmp + 1 ]"
tmp="08"
echo "2. tmp + 1 = $[ $tmp + 1 ]"А вот результат выполнения скрипта:
[root@gtw new_router]# ./1.sh
1. tmp + 1 = 8
./1.sh: line 6: 08: value too great for base (error token is "08")Укажите, пожалуйста, на ошибку.
>tmp="08"<tmp="^----указываю. Не за что.
( ^--- - это _стрелочка_, да-а-а?)
>./1.sh: line 6: 08: value too great for base (error token is
>"08")
>Укажите, пожалуйста, на ошибку.
>>tmp="08"
>
><tmp="^----указываю. Не за что.
>
>( ^--- - это _стрелочка_, да-а-а?)
>
>>./1.sh: line 6: 08: value too great for base (error token is
>>"08")
>>Укажите, пожалуйста, на ошибку.Наскока я понял указывает эта стрелочка на "0". Почему тогда "07" работает? Везде утверждается, что переменные в баше не имеют типа. Так что "08" и "8" должны быть идеинтичны. С просто "8" пробовал, работает оно, но мне без этого нуля впереди ну никак не обойтись.
Есть ли какие-нить методики, чтобы побороться с этим?
>Наскока я понял указывает эта стрелочка на "0".Ну, в общем, да. Корректенее было бы, наверное на "08" целиком указать...
И сообщение об ошибке тебе на него "указывало", жаль стрелочек не рисовало.> Почему тогда "07" работает?
077 попробуй. Выводы?
>Везде утверждается, что переменные в баше не имеют типа.
>Так что "08" и "8" должны быть идеинтичны.Если это переменные, то я Дональд Кнут.
>но мне без этого нуля впереди ну никак не обойтись.
>Есть ли какие-нить методики, чтобы побороться с этим?С чем? С "ну никак не"?... Медитация, аутотренинт, выработка храрактера.
ЗЫ: Убойнейшая мантра для медитационной закалки характера:
man bash
>[оверквотинг удален]
>
>Если это переменные, то я Дональд Кнут.
>
>>но мне без этого нуля впереди ну никак не обойтись.
>>Есть ли какие-нить методики, чтобы побороться с этим?
>
>С чем? С "ну никак не"?... Медитация, аутотренинт, выработка храрактера.
>
>ЗЫ: Убойнейшая мантра для медитационной закалки характера:
>man bashВ общем-то Андрей спасибо, не раз с Вами сталкиваюсь на просторах форума опеннета, Вы как всегда очень красноречивы, вот тока толка от ваших советов маловато. Уподобляться Вам не стану, лишь опишу решение (как написано в правилах форума).
Проблема решилась с помощью Яндекса.
Заключалась она в том, что баш по какой-то неведомой мне причине (наверное дефолты такие или 0 впереди на это указывает) воспринимал мою переменную как 8ричную и соответственно числа 8 существовать в ней не может. Для того, чтобы баш воспринимал переменную как 10чную необходимо указать ему это явным образом - 10#$tmp. Пример исправленного скрипта:
[root@gtw new_router]# cat 1.sh
#!/bin/bashtmp="07"
echo "1. tmp + 1 = $[ $tmp + 1 ]"
tmp="08"
echo "2. tmp + 1 = $[ 10#$tmp + 1 ]"И результат выполнения:
[root@gtw new_router]# ./1.sh
1. tmp + 1 = 8
2. tmp + 1 = 9
>В общем-то Андрей спасибо, не раз с Вами
>Проблема решилась с помощью Яндекса.
>как 10чную необходимо указать ему это явным образом - 10#$tmpНу, что Вы, это Вам спасибо: я не знал.
man bash - каждый раз либо что-то новое, либо что-то пропустил.
Ну конечно яндекс это проще чем man bash. Ну и остаются в памяти глупые мысли про дефолты и шаманские заклинания. Андрей действительно витиевато выражается и, о ужас, требуется чуть-чуть напрячь извилины дабы понять куда он клонит. Многим это удается и для них толк от советов Андрея есть. Но некоторым конечно сложить вместе указание на base от bash, указание на 0 и предложение попробовать с 077(на выходе будет 64, оно же 0100 в восьмеричной) наверное действительно оказалось слишком сложно.
> В общем-то Андрей спасибо, не раз с Вами сталкиваюсь на просторах форума
> опеннета, Вы как всегда очень красноречивы, вот тока толка от ваших
> советов маловато. Уподобляться Вам не стану, лишь опишу решение (как написано
> в правилах форума).Спасибо тебе, добрый человек. Сколько же ты мне времени сэкономил.. В отличии от ответов выше..