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


Программирование на языке сценариев командной оболочки - стр. 268


# Однако... если имя переменной состоит из единственного символа подчеркивания, то это ошибка. _=25 echo $_ # $_ -- это внутренняя переменная.

xyz((!*=value2 # Вызывает серьезные проблемы.

Использование дефиса, и других зарезервированных символов, в именах переменных.

var-1=23 # Вместо такой записи используйте 'var_1'.

Использование одинаковых имен для переменных и функций. Это делает сценарий трудным для понимания.

do_something () { echo "Эта функция должна что-нибудь сделать с \"$1\"." }

do_something=do_something

do_something do_something

# Все это будет работать правильно, но слишком уж запутанно.

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

var1 = 23 # Правильный вариант: 'var1=23'. # В вышеприведенной строке Bash будет трактовать "var1" как имя команды # с аргументами "=" и "23".

let c = $a - $b # Правильный вариант: 'let c=$a-$b' или 'let "c = $a - $b"'

if [ $a -le 5] # Правильный вариант: if [ $a -le 5 ] # if [ "$a" -le 5 ] еще лучше. # [[ $a -le 5 ]] тоже верно.

Ошибочным является предположение о том, что неинициализированные переменные содержат "ноль". Неинициализированные переменные содержат "пустое" (null) значение, а не ноль.

#!/bin/bash

echo "uninitialized_var = $uninitialized_var" # uninitialized_var =

Часто программисты путают операторы сравнения = и -eq. Запомните, оператор = используется для сравнения строковых переменных, а -eq -- для сравнения целых чисел.

if [ "$a" = 273 ] # Как вы полагаете? $a -- это целое число или строка? if [ "$a" -eq 273 ] # Если $a -- целое число.

# Иногда, такого рода ошибка никак себя не проявляет. # Однако...

a=273.0 # Не целое число.

if [ "$a" = 273 ] then echo "Равны." else echo "Не равны." fi # Не равны.

# тоже самое и для a=" 273" и a="0273".

# Подобные проблемы возникают при использовании "-eq" со строковыми значениями.




- Начало -  - Назад -  - Вперед -



Книжный магазин