Skip to content

Instantly share code, notes, and snippets.

@shellscriptx
Created February 28, 2019 00:01
Show Gist options
  • Save shellscriptx/de59058a277a68bfde4f660dca18e4f5 to your computer and use it in GitHub Desktop.
Save shellscriptx/de59058a277a68bfde4f660dca18e4f5 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Lê arquivo.
conteudo=$(< arq1.yaml)
# variável.
var='[email protected]'
# Lê o contéudo enquanto houver variáveis.
# Ex: ${var1}, ${var2} ...
while [[ $conteudo =~ \$\{([a-zA-Z0-9_]+)\} ]]; do
# Substitui a variável casada pelo seu valor.
conteudo=${conteudo//$BASH_REMATCH/${!BASH_REMATCH[1]}}
done
# Grava o novo arquivo.
echo "$conteudo" > arq2.yaml
@dodopontocom
Copy link

Like a charm

@dodopontocom
Copy link

dodopontocom commented Feb 28, 2019

Shaman , e se eu quero validar se a variável for vazia, se ela for vazia eu queria que não fizesse nada
Eu tentei usando um if [[ ! -z ${BASH_REMATCH} ]] antes da substituição
mas deu erro, ficava num loop infinito

@shellscriptx
Copy link
Author

Para verificar se o comprimento de uma variável é zero, é [ -z "$var" ] ou [[ ! $var ]].

@dodopontocom
Copy link

dodopontocom commented Feb 28, 2019

então, eu tenho o seguinte:
em algum momento um export aconteceu:
~$ export EMAIL=[email protected]

e eu tenho o arquivo file1.yaml ->
list:

  • ${EMAIL}
  • ${VAR_VAZIA}

Aí eu executo o var2val.sh
e o meu file2.yaml fica assim ->
list:

sendo que o esperado é que se a ${VAR_VAZIA} nao foi exportada/nao existe o file2.yaml continue assim ->
list:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment