П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 183566 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 83436 раз(а).

Учебник HTML.
Просмотров 77672 раз(а).

Руководство по PHP5.
Просмотров 48491 раз(а).

Хостинг через призму DNS.
Просмотров 55905 раз(а).

Подборка текстов стандартных документов.
Просмотров 47782 раз(а).

Учебник PHP - Самоучитель
Просмотров 54283 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 55422 раз(а).

Внешние атаки...
Просмотров 44809 раз(а).

Учебник PHP.
Просмотров 39754 раз(а).

SSI в примерах.
Просмотров 29874 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





4.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

ВНИМАНИЕ. В трех последних случаях использована своеобразная команда "eval" (от evaluate - означивать), которая в подставленной в нее (в качестве аргумента) команде выполняет означивание переменных (если таковые имеются). В результате значение "A" остается прежним, поскольку "A" имеет значение "22". А переменные "B" и "C" имеют значение "$x". За счет означивания, которое было выполнено командой "eval" - evaluated "B" и "C" дают значения "22".

Еще один пример на "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

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



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: