Здравствуйте.Почитал о declare и появилось пара вопросов.
Например, declare -f выводит список функций, объявленных выше - как это можно использовать, для чего?
Объявление целочисленной переменной.
Есть ли принципиальная разница или плюсы в использовании между:
declare -i VARIAVLE=120
VARIABLE=VARIAVLE+1
иVARIAVLE=120
VARIAVLE=$(($VARIAVLE+1))
> Объявление целочисленной переменной.
> Есть ли принципиальная разница или плюсы в использовании между:Принципиальня разница есть!
> declare -i VARIAVLE=120
> VARIABLE=VARIAVLE+1^^^--- вот тут не хватает `let`
> VARIAVLE=120
> VARIAVLE=$(($VARIAVLE+1))
>> Объявление целочисленной переменной.
>> Есть ли принципиальная разница или плюсы в использовании между:
> Принципиальня разница есть!
>> declare -i VARIAVLE=120
>> VARIABLE=VARIAVLE+1
> ^^^--- вот тут не хватает `let`вот тут как раз let и не обязателен). ибо VARIAVLE уже заявлено как целочисленное значение:
[root@local mysql]# declare -i a=5; a=a+1; echo $a
6>> VARIAVLE=120
>> VARIAVLE=$(($VARIAVLE+1))В целом declare это наложение каких-то ограничений на переменную при ее определении. Дает как плюсы, так и минусы. Может рассматриваться в качестве инструмента строгого типизирования переменных (но слабого ИМХО), что обычно реализуется во всех высокоуровневых языках программирования.
> вот тут как раз let и не обязателен). ибо VARIAVLE уже заявлено
> как целочисленное значение:
> [root@local mysql]# declare -i a=5; a=a+1; echo $a
> 6Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.
>> вот тут как раз let и не обязателен). ибо VARIAVLE уже заявлено
>> как целочисленное значение:
>> [root@local mysql]# declare -i a=5; a=a+1; echo $a
>> 6
> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.мб приколы шела? здесь же ограничений на это не давали. :D. но нативно именно так и должно работать.
>>> вот тут как раз let и не обязателен). ибо VARIAVLE уже заявлено
>>> как целочисленное значение:
>>> [root@local mysql]# declare -i a=5; a=a+1; echo $a
>>> 6
>> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.
> мб приколы шела? здесь же ограничений на это не давали. :D. но
> нативно именно так и должно работать.Вот интересно практическое применение этого.
Есть ли смысл объявлять все переменные-счетчики и им подобные целочисленными?
Может баш меньше памяти под них выделяет или быстрее обрабатывает...
Есть ли + в производительности?
>[оверквотинг удален]
>>>> как целочисленное значение:
>>>> [root@local mysql]# declare -i a=5; a=a+1; echo $a
>>>> 6
>>> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.
>> мб приколы шела? здесь же ограничений на это не давали. :D. но
>> нативно именно так и должно работать.
> Вот интересно практическое применение этого.
> Есть ли смысл объявлять все переменные-счетчики и им подобные целочисленными?
> Может баш меньше памяти под них выделяет или быстрее обрабатывает...
> Есть ли + в производительности?Все, почитал другие Ваши ответы и разобрался
этих плюсов нет, смысл в другом.
Спасибо.
>> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.
> мб приколы шела? здесь же ограничений на это не давали.Нет. Посмотрел на работе на "тот" терминал. Смотрел туда, а вот там, куда не смотрел, была очепятка. Сам запорол проверку :S //И да, к тому же предполагал правоверный bash//
> Здравствуйте.
> Почитал о declare и появилось пара вопросов.
> Например, declare -f выводит список функций, объявленных выше - как это можно
> использовать, для чего?например для скриптов, которые могут инклюдить пользовательские скрипты:
source скрипт_пользователя; declare -f|grep функция; если есть функция, то выполнить ее. = организация API-интерфейса для пользователя в сложных системах.то же самое можно отнести и к динамически-генерируемым скриптам. = анализ ОС, оборудования, etc и построение исполняемого кода под конкретную платформу.
можно придумать массу применений. только заморачиваться на "придумках" в отсутствии реальной задачи вряд ли целесообразно. надо просто помнить, что возможность получения подобной информации есть, а как ее использовать - это уже дело десятое.
> Объявление целочисленной переменной.
> Есть ли принципиальная разница или плюсы в использовании между:
> declare -i VARIAVLE=120
> VARIABLE=VARIAVLE+1
> и
> VARIAVLE=120
> VARIAVLE=$(($VARIAVLE+1))
> Здравствуйте.
> Почитал о declare и появилось пара вопросов.
> Например, declare -f выводит список функций, объявленных выше - как это можно
> использовать, для чего?
> Объявление целочисленной переменной.
> Есть ли принципиальная разница или плюсы в использовании между:
> declare -i VARIAVLE=120переменная типизирована
[root@local mysql]# declare -i v="001"; echo $v; v="zzz"; echo $v
1
0> VARIABLE=VARIAVLE+1
> и
> VARIAVLE=120переменная не типизирована
[root@local mysql]# v="001"; echo $v; v="zzz"; echo $v
001
zzz
> VARIAVLE=$(($VARIAVLE+1))плюсы и минусы есть. они вполне очевидны из приведенных примеров. но только от программиста зависит, как он инструмент использует для решения своих задач.
Полезная фича, когда переменную не видно за пределами функции.
#!/bin/bashfunction aaa() {
VAR="pipiska"
};aaa;
echo $VAR;function bbb() {
declare RAV="shlen"
}bbb;
echo $RAV;$ sh test.sh
pipiska
>[оверквотинг удален]
>
> #!/bin/bash
> function aaa() {
> VAR="pipiska"
> };
> aaa;
> echo $VAR;
> function bbb() {
> declare RAV="shlen"
>local RAV="shlen"
из мана про declare:
When used in a function, makes each name local, as with the local command.никаких плюсов не вижу в данном случае. ИМХО пример неудачного примера.
>
> }
> bbb;
> echo $RAV;
>
> $ sh test.sh
> pipiskaобласть видимости переменной - это абсолютно другая тема.
основная фишка declare в том, что он привязывает переменным некоторые атрибуты (тип данных, readonly=const, etc). надо это или нет - каждый злобный буратино решает сам для себя.
>[оверквотинг удален]
>> }
>> bbb;
>> echo $RAV;
>>
Спасибо.
Стало понятнее.
>local RAV="shlen"
>из мана про declare:
>When used in a function, makes each name local, as with the local command.Ну тогда
declare -r RAV="shlen" == readonly RAV="shlen"> основная фишка declare в том, что он привязывает переменным некоторые атрибуты (тип
> данных, readonly=const, etc). надо это или нет - каждый злобный буратино
> решает сам для себя.Типы "очень нужны" в безтиповом языке, не имеющего даже float.
>>local RAV="shlen"
>>из мана про declare:
>>When used in a function, makes each name local, as with the local command.
> Ну тогда
> declare -r RAV="shlen" == readonly RAV="shlen"и как это относится к предыдущему Вашему утверждению "Полезная фича, когда переменную не видно за пределами функции." и моему ответу на это?
>> основная фишка declare в том, что он привязывает переменным некоторые атрибуты (тип
>> данных, readonly=const, etc). надо это или нет - каждый злобный буратино
>> решает сам для себя.
> Типы "очень нужны" в безтиповом языке, не имеющего даже float.Да не очень. Но иногда подобный подход позволяет упростить код.
К тому же кроме флага -i есть и другие полезные флаги.