Если запускать echo | sed
внутри обратных апострофов, знак доллара не заменит. Если вне их, заменит:
$ name1='a$b'; echo $name1 | sed 's/\$/ /g'; name2=`echo $name1 | sed 's/\$/ /g'`; echo $name2
a b
a$b
Если заменить $ на \x24, то не сработает нигде:
$ name1='a$b'; echo $name1 | sed 's/\x24/ /g'; name2=`echo $name1 | sed 's/\x24/ /g'`; echo $name2
a$b
a$b
Но если взять \x24 в квадратные скобки, заработает:
$ name1='a$b'; echo $name1 | sed 's/[\x24]/ /g'; name2=`echo $name1 | sed 's/[\x24]/ /g'`; echo $name2
a b
a b
Почему так происходит?