The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"declare в Bash, целочисленные переменные и вывод списка функций"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от sick_monkey (ok) on 13-Мрт-13, 15:27 
Здравствуйте.

Почитал о declare и появилось пара вопросов.
Например, declare -f выводит список функций, объявленных выше - как это можно использовать, для чего?
Объявление целочисленной переменной.
Есть ли принципиальная разница или плюсы в использовании между:
declare -i VARIAVLE=120
VARIABLE=VARIAVLE+1
и

VARIAVLE=120
VARIAVLE=$(($VARIAVLE+1))

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от Andrey Mitrofanov on 13-Мрт-13, 19:14 
> Объявление целочисленной переменной.
> Есть ли принципиальная разница или плюсы в использовании между:

Принципиальня разница есть!

> declare -i VARIAVLE=120
> VARIABLE=VARIAVLE+1

^^^--- вот тут не хватает `let`

> VARIAVLE=120
> VARIAVLE=$(($VARIAVLE+1))

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от LSTemp (ok) on 13-Мрт-13, 21:16 
>> Объявление целочисленной переменной.
>> Есть ли принципиальная разница или плюсы в использовании между:
> Принципиальня разница есть!
>> 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 это наложение каких-то ограничений на переменную при ее определении. Дает как плюсы, так и минусы. Может рассматриваться в качестве инструмента строгого типизирования переменных (но слабого ИМХО), что обычно реализуется во всех высокоуровневых языках программирования.


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от Andrey Mitrofanov on 13-Мрт-13, 21:24 
> вот тут как раз let и не обязателен). ибо VARIAVLE уже заявлено
> как целочисленное значение:
> [root@local mysql]# declare -i a=5; a=a+1; echo $a
> 6

Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от LSTemp (ok) on 13-Мрт-13, 21:51 
>> вот тут как раз let и не обязателен). ибо VARIAVLE уже заявлено
>> как целочисленное значение:
>> [root@local mysql]# declare -i a=5; a=a+1; echo $a
>> 6
> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.

мб приколы шела? здесь же ограничений на это не давали. :D. но нативно именно так и  должно работать.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

9. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от sick_monkey (ok) on 14-Мрт-13, 08:28 
>>> вот тут как раз let и не обязателен). ибо VARIAVLE уже заявлено
>>> как целочисленное значение:
>>> [root@local mysql]# declare -i a=5; a=a+1; echo $a
>>> 6
>> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.
> мб приколы шела? здесь же ограничений на это не давали. :D. но
> нативно именно так и  должно работать.

Вот интересно практическое применение этого.
Есть ли смысл объявлять все переменные-счетчики и им подобные целочисленными?
Может баш меньше памяти под них выделяет или быстрее обрабатывает...
Есть ли + в производительности?

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

11. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от sick_monkey (ok) on 14-Мрт-13, 08:41 
>[оверквотинг удален]
>>>> как целочисленное значение:
>>>> [root@local mysql]# declare -i a=5; a=a+1; echo $a
>>>> 6
>>> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.
>> мб приколы шела? здесь же ограничений на это не давали. :D. но
>> нативно именно так и  должно работать.
> Вот интересно практическое применение этого.
> Есть ли смысл объявлять все переменные-счетчики и им подобные целочисленными?
> Может баш меньше памяти под них выделяет или быстрее обрабатывает...
> Есть ли + в производительности?

Все, почитал другие Ваши ответы и разобрался
этих плюсов нет, смысл в другом.
Спасибо.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

13. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от Andrey Mitrofanov on 14-Мрт-13, 22:50 
>> Ой, проверял же, вроде. :( Видимо, смотрел в другую сторону.
> мб приколы шела? здесь же ограничений на это не давали.

Нет. Посмотрел на работе на "тот" терминал. Смотрел туда, а вот там, куда не смотрел, была очепятка. Сам запорол проверку :S //И да, к тому же предполагал правоверный bash//

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

4. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от LSTemp (ok) on 13-Мрт-13, 21:33 
> Здравствуйте.
> Почитал о declare и появилось пара вопросов.
> Например, declare -f выводит список функций, объявленных выше - как это можно
> использовать, для чего?

например для скриптов, которые могут инклюдить пользовательские скрипты:
source скрипт_пользователя; declare -f|grep функция; если есть функция, то выполнить ее. = организация API-интерфейса для пользователя в сложных системах.

то же самое можно отнести и к динамически-генерируемым скриптам. = анализ ОС, оборудования, etc и построение исполняемого кода под конкретную платформу.

можно придумать массу применений. только заморачиваться на "придумках" в отсутствии реальной задачи вряд ли целесообразно. надо просто помнить, что возможность получения подобной информации есть, а как ее использовать - это уже дело десятое.

> Объявление целочисленной переменной.
> Есть ли принципиальная разница или плюсы в использовании между:
> declare -i VARIAVLE=120
> VARIABLE=VARIAVLE+1
> и
> VARIAVLE=120
> VARIAVLE=$(($VARIAVLE+1))

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от LSTemp (ok) on 13-Мрт-13, 21:48 
> Здравствуйте.
> Почитал о 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))

плюсы и минусы есть. они вполне очевидны из приведенных примеров. но только от программиста зависит, как он инструмент использует для решения своих задач.


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от pavlinux (ok) on 14-Мрт-13, 03:32 
Полезная фича, когда переменную не видно за пределами функции.

 
#!/bin/bash

function aaa() {
   VAR="pipiska"
};

aaa;
echo $VAR;

function bbb() {
   declare RAV="shlen"
}

bbb;
echo $RAV;

$ sh test.sh
pipiska


Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от LSTemp (ok) on 14-Мрт-13, 05:46 
>[оверквотинг удален]
>
 
> #!/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). надо это или нет - каждый злобный буратино решает сам для себя.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от sick_monkey (ok) on 14-Мрт-13, 08:37 
>[оверквотинг удален]
>> }
>> bbb;
>> echo $RAV;
>>
>> $ sh test.sh
>> pipiska
> область видимости переменной - это абсолютно другая тема.
> основная фишка declare в том, что он привязывает переменным некоторые атрибуты (тип
> данных, readonly=const, etc). надо это или нет - каждый злобный буратино
> решает сам для себя.

Спасибо.
Стало понятнее.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

12. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от pavlinux (ok) on 14-Мрт-13, 14:47 
>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.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

14. "declare в Bash, целочисленные переменные и вывод списка функций"  +/
Сообщение от LSTemp (ok) on 17-Мрт-13, 05:58 
>>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 есть и другие полезные флаги.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру