Книга: Искусство программирования на языке сценариев командной оболочки

4.3. Переменные Bash не имеют типа

В отличие от большинства других языков программирования, 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 не будет делать это за вас!

Оглавление книги


Генерация: 1.189. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз