Como usar uma variável de script bash com sed

Eu executo o seguinte script bash:

#!/bin/bash version=$1 echo $version sed 's/\${version.number}/$version/' template.txt > readme.txt 

Eu estou esperando para replace todas as instâncias de $ {version.number} com o conteúdo da variável “version”. Em vez disso, o texto literal $ version está sendo inserido.

O que eu preciso fazer para fazer o sed usar o valor atual da versão $?

 sed "s/\${version.number}/$version/" template.txt > readme.txt 

Apenas aspas duplas fazem a substituição do sinal de dólar. Isso também significa que aspas simples não exigem que o sinal de dólar seja escapado.

Você também pode simplesmente desmarcar as variables

 sed 's/'${version.number}'/'$version'/' template.txt > readme.txt 

É um pouco velho, mas ainda pode ser útil … Para mim, funcionou usando um escape duplo, como Philip disse (e escapando de parênteses, se você usá-los …):

 #!/bin/bash LIVE_DB_NAME='wordpress'; STAGING='staging'; sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1;