Substituir string em um arquivo do valor do script bash

0

Este script bash é executado em um terminal Mac, ele precisa pedir ao usuário a entrada $name e, em seguida, substituir uma string em outro arquivo para incluir a entrada do usuário PLACEHOLDER_BACKEND_NAME=$name .

#!/bin/bash
read -r name

if ! grep -q PLACEHOLDER_BACKEND_NAME="\"$name\"" ~/path-to-file.sh; then
perl -pi -e 's/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME=$name/g' ~/psth-to-file.sh
fi

O comando perl replace não recebe o valor na variável $name . Eu não estou familiarizado com Bash.

    
por Fred J. 26.12.2016 / 12:26

2 respostas

0

As variáveis não são expandidas entre aspas simples. A variável $name está entre aspas simples. Você pode corrigir isso quebrando aspas simples no meio:

perl -pi -e 's/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME='"$name"'/g' ~/psth-to-file.sh

Observe que eu citei a variável duas vezes para proteger contra globbing e divisão de palavras.

    
por 26.12.2016 / 12:34
1
O

bash não expande o conteúdo da variável dentro de uma string de aspas simples. Você tem que usar cadeias duplas entre aspas.

Exemplos:

Isso imprimirá: meu nome é: $ name

name="haha"
echo 'my name is : $name'

Isso imprimirá: meu nome é: haha

name="haha"
echo "my name is : $name"

Então, basta substituir

perl -pi -e 's/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME=$name/g' ~/psth-to-file.sh

com

perl -pi -e "s/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME=$name/g" ~/psth-to-file.sh
    
por 26.12.2016 / 19:14