3.2. Экранирование
Рассмотрим более подробно приемы экранирования, используемые в shell. В качестве
средств экранирования используются двойные кавычки (" "), одинарные кавычки ('
') и бэк-слэш (\).
Из примеров очевидно их действие:
Можно в одной строке записывать несколько приcваиваний.
x=22 y=33 z=$x
A="$x" B='$x' C=\$x
D="$x + $y + $z" E='$x + $y + $z' F=$x\ +\ $y\ +\ $z
(присваивание G=$x+$y не было бы выполнено из-за пробелов)
Тогда
echo A = $A B = $B C = $C
echo D = $D E = $E F = $F
eval echo evaluated A = $A
eval echo evaluated B = $B
eval echo evaluated C = $C
Выдадут на экран
A = 22 B = $x C = $x
D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22
evaluated A = 22
evaluated B = 22
evaluated C = 22
Приведем еще примеры, связанные с экранированием перевода строки. Пусть
переменной "string" присвоено значение "массива" 2x3:
abc
def
Обратим внимание, что для избежания присваивания лишних пробелов вторая строка
массива начата с первой позиции следующей строки:
string="abc
def"
Тогда три варианта записи переменной в команде "echo"
echo $string
echo '$string'
echo "$string"
дадут соответственно три различных результата:
abc def
$string
abc
def
а последовательность команд
echo "str_1
str_2" > file_1
echo 'str_1
str_2' > file_2
cat file_1 file_2
даст выдаст последовательно одинаковые файлы file_1 и file_2:
str_1
str_2
str_1
str_2
Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ,
что позволяет использовать специальные символы просто как символы,
представляющие сами себя (он может экранировать и сам себя - \\), но в командном
файле бэк-слэш позволяет об'единять строки в одну (экранировать конец строки).
Например, приводившийся ранее пример командной строки:
cat file_1 grep -h result sort cat -b > file_2
может быть записан в командном файле, скажем, как
cat file_1 grep -h \
result sort cat -b > file_2
Кстати, эффект продолжения командной строки обеспечивает и символ конвейера. В
данном случае это может дать более симпатичный результат, например:
cat file_1
grep -h result
sort
cat -b > file_2
3.3. Манипуляции с shell-переменными
Несмотря на то, что shell-переменные в общем случае воспринимаются как строки,
т. е. "35" - это не число, а строка из двух символов "3" и "5", в раде случаев
они могут интерпретироваться иначе, например, как целые числа.
Разнообразные возможности имеет команда "expr".
Проиллюстрируем некоторые на примерах:
Выполнение командного файла:
x=7 y=2
a=`expr $x + $y` ; echo a=$a
a=`expr $a + 1` ; echo a=$a
b=`expr $y - $x` ; echo b=$b
c=`expr $x '*' $y` ; echo c=$c
d=`expr $x / $y` ; echo d=$d
e=`expr $x % $y` ; echo e=$e
выдаст на экран
a=9
a=10
b=-5
c=14
d=3
e=1
Операция умножения ("*") обязательно должна быть заэкранирована, поскольку в
shell этот значок воспринимается, как спецсимвол, означающий, что на это место
может быть подставлена любая последовательность символов.
С командой "expr" возможны не только (целочисленные) арифметические операции, но
и строковые:
A=`expr 'cocktail' : 'cock'` ; echo $A
B=`expr 'cocktail' : 'tail'` ; echo $B
C=`expr 'cocktail' : 'cook'` ; echo $C
D=`expr 'cock' : 'cocktail'` ; echo $D
На экран будут выведены числа, показывающее число совпадающих символов в
цепочках (от начала). Вторая из строк не может быть длиннее первой :
4
0
0
0
3.4. Экспорт переменных
В ОС UNIX существует понятие процесса. Процесс возникает тогда, когда
запускается на выполнение какая-либо команда.
Например, при наборе на клавиатуре "р <Enter>" порождается процесс "р". В свою
очередь "р" может породить другие процессы. Допустим, что "р" вызывает "р1" и
"р2", которые последовательно порождают соответствующие процессы.
У каждого процесса есть своя среда - множество доступных ему переменных.
Например, до запуска "р" уже существовала среда, в которой уже были определены
некоторые переменные. Запуск "р" порождает новую среду; уже в ней будут
порождены "р1" и "р2".
Переменные локальны в рамках процесса, в котором они объявлены, т.е. где им
присвоены значения. Для того, чтобы они были доступны и другим порождаемым
процессам, надо передать их явным образом. Для этого используется встроенная
команда "export".
... не зависимый от языка способ создания кода и привязки его к запросам Web-страниц, — .NET Web Forms — управляемую событиями программную модель взаимодействия с элементами управления. Она делает программирование Web-страниц аналогичным программированию форм Visual Basic. ASP.NET содержит развитые средства управления сеансами и функции защиты. Она надежнее, и производительность ее значительно выше ...
... "проверки заразности" (taint checks) в Perl? Как их включить? Как мы видели, одна из наиболее часто встречающихся проблем с безопасностью при программировании CGI - передача оболочке ОС пользовательских переменных без их проверки. Perl предлагает механизм проверки "заразности", который не позволяет этого делать. Любая переменная, которая проинициирована данными за пределами программы (включая ...
льный для каждого маршрута): "c: Курсовая моя < название маршрута > .txt" В таких файлах информация представлена например в следующем виде: автобус, 512 водитель, Батуров П.П. кондуктор, Иванова И.И. автобус, 513 водитель, Рябова Т.И. кондуктор, Шишкова Ю.М. автобус, 514 водитель, Продидж Н.Н. кондуктор, Мартысюк С.С. остановка, , 405, 4680 остановка, , 915, 2730 остановка, , ...
... интерфеса и интерфейса локольной сети · Предложение о выборе вариантов загрузки При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика ...
0 комментариев