LINUX.ORG.RU

История изменений

Исправление 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

Спасибо.