После запуска этого кода
#!/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
Это будет делать подстановку, а также записывать ее в файл