Рассмотрим более подробно приемы экранирования, используемые в 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
Тогда
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
abc def
string="abc def"
echo $string echo '$string' echo "$string"
abc def $string abc def
echo "строка первая строка вторая" > f1 echo 'строка первая строка вторая' > f2 cat 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