Программирование на Shell (Unix)



СРЕДА SHELL (ПЕРЕМЕННЫЕ И ПАРАМЕТРЫ) - часть 4


/p>

Еще один пример на "eval".

Пусть

w=\$v v=\$u u=5

В результате выполнения команд

echo $w eval echo $w eval eval echo $w

на экран будет выведено

$v $u 5

Приведем еще примеры, связанные с экранированием перевода строки. Пусть переменной "string" присвоено значение "массива" 2x3:

abc def

Обратим внимание, что для избежания присваивания лишних пробелов вторая строка массива начата с первой позиции следующей строки:

string="abc def"

Тогда три варианта записи переменной в команде "echo"

echo $string echo '$string' echo "$string"

дадут соответственно три различных результата:

abc def $string abc def

а последовательность команд

echo "строка первая строка вторая" > f1 echo 'строка первая строка вторая' > f2 cat f1 f2

даст выдаст последовательно одинаковые файлы f1 и f2:

строка первая строка вторая строка первая строка вторая

Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ, что позволяет использовать специальные символы просто как символы, представляющие сами себя (он может экранировать и сам себя - \\), но в командном файле бэк-слэш позволяет об'единять строки в одну (экранировать конец строки).

Например, приводившийся ранее пример командной строки:

cat f1 | grep -h result | sort | cat -b > f2

может быть записан в командном файле, скажем, как

cat f1 | grep -h \ result | sort | cat -b > f2

Кстати, эффект продолжения командной строки обеспечивает и символ конвейера. В данном случае это может дать более симпатичный результат, например:

cat f1 | grep -h result | sort | cat -b > f2

4.3. Манипуляции с shell-переменными

Несмотря на то, что shell-переменные в общем случае воспринимаются как строки, т. е. "35" - это не число, а строка из двух символов "3" и "5", в раде случаев они могут интерпретироваться иначе, например, как целые числа.

Разнообразные возможности имеет команда "expr".

Проиллюстрируем некоторые на примерах:




Содержание  Назад  Вперед