История изменений
Исправление question4, (текущая версия) :
When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by $, `, or .
Вот эту фразу я не понимаю.
Что значит «old-style backquote»? С `?
Что значит «retains its literal meaning»? Не считается спецсимволом? Но тут же идёт оговорка «except when followed by $» — именно мой случай.
То есть для комбинации \$
обратная косая черта является спецсимволом и экранирует доллар? Этого не происходит.
Но с $( ... )
всё работает как я и хочу:
name1='a$b'; echo $name1 | sed 's/\$/ /g'; name2=$(echo "$name1" | sed 's/\$/ /g'); echo "$name2"
a b
a b
GNU sed processes escape sequences before passing the text onto the regular-expression matching of the s/// command and Address matching.
То есть ″/\x24/″ для sed обозначает конец строки.
То есть \x24 преобразуется в неэкранированный доллар, который считается спецсимволом, и чтобы его заэкранировать, нужно добавить \ в таком же виде: \x5c.
$ name1='a$b'; echo $name1 | sed 's/\x5c\x24/ /g'; name2=`echo "$name1" | sed 's/\x5c\x24/ /g'`; echo "$name2"
a b
a b
Спасибо.
Исходная версия question4, :
When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by $, `, or .
Вот эту фразу я не понимаю.
Что значит «old-style backquote»? С `?
Что значит «retains its literal meaning»? Не считается спецсимволом? Но тут же идёт оговорка «except when followed by $» — именно мой случай.
То есть для комбинации $ обратная косая черта является спецсимволом и экранирует доллар? Этого не происходит.
Но с $( ... )
всё работает как я и хочу:
name1='a$b'; echo $name1 | sed 's/\$/ /g'; name2=$(echo "$name1" | sed 's/\$/ /g'); echo "$name2"
a b
a b
GNU sed processes escape sequences before passing the text onto the regular-expression matching of the s/// command and Address matching.
То есть ″/\x24/″ для sed обозначает конец строки.
То есть \x24 преобразуется в неэкранированный доллар, который считается спецсимволом, и чтобы его заэкранировать, нужно добавить \ в таком же виде: \x5c.
$ name1='a$b'; echo $name1 | sed 's/\x5c\x24/ /g'; name2=`echo "$name1" | sed 's/\x5c\x24/ /g'`; echo "$name2"
a b
a b
Спасибо.