estou tentando inserir variáveis antes de linha específica no meu script. este é o código que estou usando:
var1=$(echo "database1=")
var2=$(echo "database2=")
var3=$(echo "database3=")
sed -i "/#variables/i \
$var1\
$var2\
$var3" /data1/create_database
espero que create_database
seja assim depois de executar o comando acima:
database1=
database2=
database3=
#variables
mas eu recebo este resultado:
database1= database2= database3=
#variables
tentei algumas maneiras nada funcionou. O que devo fazer?
Você não precisa de substituições de comando para definir suas variáveis:
Acho que você precisa de aspas simples para adicionar novas linhas, mas fica muito feio se você citar suas variáveis com aspas duplas. As aspas duplas são necessárias se suas variáveis contiverem caracteres de espaço:
Com GNU sed você pode simplesmente adicionar algumas novas linhas:
Você pode usar uma sequência de escape (
\n
) para inserir novas linhas. Observe queé equivalente a
então você precisaria de uma barra invertida dupla
Talvez também considere várias expressões para torná-lo um comando de linha única, onde cada expressão é efetivamente uma linha.
E, finalmente, você pode precisar escapar de suas variáveis
Você precisa dobrar o número de barras invertidas, pois está operando com aspas duplas:
E se você tem coisas melhores a fazer do que contar essas malditas barras invertidas, você pode permitir
sed
que cuide dos detalhes para você, mas isso vai custar em termos de código:Ou isso onde nenhuma menção a uma nova linha é feita:
É claro que é preciso ter cuidado ao plantar as variáveis do shell dentro do código sed. Eles têm que ser castrados primeiro e depois usados. Por exemplo, e se um se seu shell vars tivesse uma barra '/' nele?