Você pode seguir duas formas diferentes:
-
Usando aspas simples: rompa as aspas simples e faça referência à variável (usando aspas duplas para impedir a divisão de palavras e a expansão de nomes de arquivos):
sudo sed -i 's/$sUrl . $this_sOutDir/https:\/\/'"$bucketname"'.s3.amazonaws.com . $this->_sOutDir/g' /var/www/html/$name/core/oxconfig.php
-
Usando aspas duplas: escape os caracteres
$
a serem tratados literalmente:sudo sed -i "s/$sUrl . $this_sOutDir/https:\/\/$bucketname.s3.amazonaws.com . $this->_sOutDir/g' /var/www/html/$name/core/oxconfig.php
No entanto , a ressalva é: se $bucketname
contiver sed
caracteres especiais / seqüências, o comando sed
será interrompido (nesse caso, já que a variável deve ser expandida na substituição seção, a preocupação é sobre isso, possivelmente, contendo o separador, backreferences acidental ou &
.
Uma maneira de contornar isso é sanear a variável antecipadamente, evitando possíveis separadores, referências anteriores acidentais e &
caracteres para evitar que eles sejam interpretados como tal.
Outra maneira é usar Perl em vez de sed
, passando a variável diretamente para Perl, que manipulará caracteres especiais no momento da substituição ( $
caracteres a serem tratados literalmente devem ter escape mesmo se usar aspas simples com esse método):
sudo perl -i -spe 's/$sUrl . $this_sOutDir/https:\/\/$bucketname.s3.amazonaws.com . $this->_sOutDir/g' -- -bucketname="$bucketname"
$ echo '$sUrl . $this_sOutDir' | perl -spe 's/$sUrl . $this_sOutDir/https:\/\/$bucketname.s3.amazonaws.com . $this->_sOutDir/g' -- -bucketname="string/with/separators/&/and/accidental$1backreferences"
https://string/with/separators/&/and/accidentalbackreferences.s3.amazonaws.com . $this->_sOutDir