Переменная замена в сценарий sed

После запуска этого кода

#!/bin/bash rm -f myfile myfile-individual echo "Greetings, foobar!" > myfile MYSTRING="Jack" cat myfile | sed 's:foobar:$MYSTRING:' > myfile-individual 

мы заканчиваем

 Greetings, $MYSTRING! 

в myfile-individual.

Каким должен быть сценарий (sed / bash) для вывода?

 Greetings, Jack! 

Измените одинарные кавычки на двойные кавычки. И бросьте кошку (UUoC):

 sed "s:foobar:$MYSTRING:" myfile > myfile-individual 

Из manpage для bash:

  Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash. Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $, `, \, and, when history expansion is enabled, !. The characters $ and ` retain their special meaning within double quotes. The backslash retains its special meaning only when followed by one of the following characters: $, `, ", \, or <newline>. A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an ! appearing in double quotes is escaped using a backslash. The backslash preceding the ! is not removed. 
 sed -i 's|foobar|$MYSTRING' myfile-individual 

Это будет делать подстановку, а также записывать ее в файл