title: Replace bash variables in template file
body: <p>I am attempting to use Bash in order to run a form of an install process. During this process, a configuration file is copied and certain values are replaced inside of it. Such a config can be found below:</p>
  
  <pre><code>server {
      listen 80;
      root ${INSTALLPATH};
      server_name ${SITEURL};
  
      client_max_body_size 20m;
      client_body_timeout 120s;
  
      location / {
          try_files /public/router.php =404;
          fastcgi_split_path_info ^(.+?\.php)(/.*)$;
          fastcgi_pass ${PHPSERV};
          fastcgi_index router.php;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include /etc/nginx/fastcgi_params;
      }
  
      location /assets {
          try_files /app/$uri =404;
      }
  
  }
  
  #Enables HTTPS access
  #This requires you to install certificates and is not enabled by default
  #If you wish to enable HTTPS, uncomment (remove the #s) from the below lines
  #And change the ssl_certificate and ssl_certificate_key to point to the     correct
  #certificates.
  
  #server {
  #    listen 443;
  #    root ${INSTALLPATH};
  #    server_name ${SITEURL};
  #
  #    ssl on;
  #    ssl_certificate     /etc/nginx/ssl/site.crt;
  #    ssl_certificate_key /etc/nginx/ssl/site.key;
  #
  #    location / {
  #        try_files /public/router.php =404;
  #        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  #        fastcgi_pass ${PHPSERV};
  #        fastcgi_index router.php;
  #        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  #        include /etc/nginx/fastcgi_params;
  #    }
  #
  #    location /assets {
  #        try_files /app/$uri =404;
  #    }
  #
  #}
  </code></pre>
  
  <p>I have been finding that most examples stem off the use of eval, and I have tried using that to do this replacement, however it appears that the file here does not properly expand, and bash tries to execute some stuff and can't.</p>
  
  <p>Currently, I have this</p>
  
  <pre><code>INSTALLPATH="/var/www/html/mycustomsite/"
  PHPSERV="127.0.0.1:9000"
  SITEURL="example.com"
  
  while read -r line; do
      eval echo -e "${line}"
  done &lt; template
  </code></pre>
  
  <p>However, this does not properly replace the values that are declared, nor does it generate the file correctly. It loses for example any line that starts with # and tries to execute others (along with losing some spacing).</p>
  
  <p>What would be the correct way to do this, using just Bash and commands available on most Linux systems?</p>