4.3. Переменные Bash не имеют типа | Популярный Linux

Опубликовано Bash в Ср, 23/12/2009 — 20:56


В отличие от большинства других языков программирования, Bash не производит разделения переменных по «типам». По сути, переменные Bash являются строковыми переменными, но, в зависимости от контекста, Bash допускает целочисленную арифметику с переменными. Определяющим фактором здесь служит содержимое переменных.

Пример 4-4. Целое число или строка?

  1. #!/bin/bash
  2. # int-or-string.sh: Целое число или строка?
  3. a=2334                   # Целое число.
  4. let «a += 1»
  5. echo «a = $a «           # a = 2335
  6. echo                     # Все еще целое число.
  7. b=${a/23/BB}             # замена «23» на «BB».
  8.                          # Происходит трансформация числа в строку.
  9. echo «b = $b«            # b = BB35
  10. declare -i b             # Явное указание типа здесь не поможет.
  11. echo «b = $b«            # b = BB35
  12. let «b += 1»             # BB35 + 1 =
  13. echo «b = $b«            # b = 1
  14. echo
  15. c=BB34
  16. echo «c = $c«            # c = BB34
  17. d=${c/BB/23}             # замена «BB» на «23».
  18.                          # Переменная $d становится целочисленной.
  19. echo «d = $d«            # d = 2334
  20. let «d += 1»             # 2334 + 1 =
  21. echo «d = $d«            # d = 2335
  22. echo
  23. # А что происходит с «пустыми» переменными?
  24. e=«»
  25. echo «e = $e«            # e =
  26. let «e += 1»             # Арифметические операции допускают использование «пустых» переменных?
  27. echo «e = $e«            # e = 1
  28. echo                     # «Пустая» переменная становится целочисленной.
  29. # А что происходит с необъявленными переменными?
  30. echo «f = $f«            # f =
  31. let «f += 1»             # Арифметические операции допустимы?
  32. echo «f = $f«            # f = 1
  33. echo                     # Необъявленная переменная трансформируется в целочисленную.
  34. # Переменные Bash не имеют типов.
  35. exit 0

Отсутствие типов — это и благословение и проклятие. С одной стороны — отсутствие типов делает сценарии более гибкими (чтобы повеситься — достаточно иметь веревку!) и облегчает чтение кода. С другой — является источником потенциальных ошибок и поощряет привычку к «неряшливому» программированию.

Бремя отслеживания типа той или иной переменной полностью лежит на плечах программиста. Bash не будет делать это за вас!

Запись опубликована в рубрике Без рубрики. Добавьте в закладки постоянную ссылку.