Яка різниця між оголошенням і набором


22

Чи може хтось пояснити різницю між заявою та набором даних із прикладами реального життя.

Відповіді:


27

В bash, typesetі declareточно такі ж. Різниця лише в тому, що typesetвважається застарілим.

typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.

Сторінка людини навіть перераховує їх на одному диханні:

declare [-aAfFgilrtux] [-p] [name[=value] ...]
typeset [-aAfFgilrtux] [-p] [name[=value] ...]
    Declare variables and/or give them attributes.

typesetпортативний для деяких інших оболонок, наприклад, ksh93. Якщо ви прагнете перехресної переносності оболонки, скористайтеся typeset(і переконайтесь, що спосіб її виклику переносить) Якщо ви не переймаєтесь такою портативністю, використовуйте declare.


Ви можете надати приклад того, де і навіщо це використовувати у скрипті bash
Рахул Патіл,

1
... як я вже сказав, вони точно такі ж. Я не розумію, як я можу їх розрізнити, якщо вони такі.
Chris Down

2
Хороший. Зауважте, що "застарілий" просто відображається в help typeset, а не в man typeset.
fedorqui

2
@ChrisDown, ти не випадково дізнаєшся, чому саме typesetвін вважається застарілим?
Олексій Магура

3

Я знаю випадок, коли declareкорисно уникати зла eval: змінна непрямість :

$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value

Це хороший коментар, але як це дає відповідь на питання, про яке йдеться typesetі declare?
jw013

На це вже добре відповів Кріс Даун, моя відповідь - це лише випадок, коли це корисно
Жил Кінот

Можливо, мені було не ясно. Коментарі повинні бути коментарями, а відповіді - відповідями. Це коментар, а не відповідь.
jw013

3
Мій фрагмент не проясниться в коментарі
Жил Кінот

але ви все одно можете призначити змінні з набором ... просто замініть декларувати набір, і ви все одно отримаєте той же результат.
pcarvalho
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.