В отличие от большинства других языков программирования, Bash не производит разделения переменных по «типам». По сути, переменные Bash являются строковыми переменными, но, в зависимости от контекста, Bash допускает целочисленную арифметику с переменными. Определяющим фактором здесь служит содержимое переменных.
Пример 4-4. Целое число или строка?
-
#!/bin/bash
-
# int-or-string.sh: Целое число или строка?
-
a=2334 # Целое число.
-
let «a += 1»
-
echo «a = $a « # a = 2335
-
echo # Все еще целое число.
-
b=${a/23/BB} # замена «23» на «BB».
-
# Происходит трансформация числа в строку.
-
echo «b = $b« # b = BB35
-
declare -i b # Явное указание типа здесь не поможет.
-
echo «b = $b« # b = BB35
-
let «b += 1» # BB35 + 1 =
-
echo «b = $b« # b = 1
-
echo
-
c=BB34
-
echo «c = $c« # c = BB34
-
d=${c/BB/23} # замена «BB» на «23».
-
# Переменная $d становится целочисленной.
-
echo «d = $d« # d = 2334
-
let «d += 1» # 2334 + 1 =
-
echo «d = $d« # d = 2335
-
echo
-
# А что происходит с «пустыми» переменными?
-
e=«»
-
echo «e = $e« # e =
-
let «e += 1» # Арифметические операции допускают использование «пустых» переменных?
-
echo «e = $e« # e = 1
-
echo # «Пустая» переменная становится целочисленной.
-
# А что происходит с необъявленными переменными?
-
echo «f = $f« # f =
-
let «f += 1» # Арифметические операции допустимы?
-
echo «f = $f« # f = 1
-
echo # Необъявленная переменная трансформируется в целочисленную.
-
# Переменные Bash не имеют типов.
-
exit 0
Отсутствие типов — это и благословение и проклятие. С одной стороны — отсутствие типов делает сценарии более гибкими (чтобы повеситься — достаточно иметь веревку!) и облегчает чтение кода. С другой — является источником потенциальных ошибок и поощряет привычку к «неряшливому» программированию.
Бремя отслеживания типа той или иной переменной полностью лежит на плечах программиста. Bash не будет делать это за вас!
- Страница для печати
- 9950 просмотров