I have a strange problem - possibly I'm just going blind. I have this short script, which replaces the string #qry# in the here-document with a select statement in a file and then pipes it to mysql:
#!/bin/bash
if [[ "$1" == "-h" ]]
then
  echo "sqljob [sqlfile] [procnm] [host] [database] [config file]"
  echo "       sqlfile: text file containing an SQL statement"
  echo "       procnm: name that will given to the new, stored procedure"
  echo "       host: hostname of IP address of the database server"
  echo "       database: the procedure will be created here"
  echo "       config file: default configuration file with username and password"
  exit
fi
infile=$1
procnm=$2
hn=$3
pn=$4
db=$5
mycfg=$6
{
set -o noglob
sed -e "s/#qry#/$(echo $(cat $infile))/g" <<!
drop procedure if exists $procnm;
delete from jobs where jobname="$procnm";
insert into jobs
set
  notes="SQL job $procnm",
  jobname="$procnm",
  parm_tmpl='int';
delimiter //
create procedure $procnm(vqid int)
begin
  call joblogmsg(vqid,0,"$procnm","","Executing #qry#");
  drop table if exists ${procnm}_res;
  create table ${procnm}_res as
  #qry#
end//
delimiter ;
!
} | mysql --defaults-file=$mycfg -h $hn -P $pn $db
However, when the select contains *, it expands to whatever is in the directory even though I use noglob. However, it works from the command line:
$ set -o noglob
$ ls *
What am I doing wrong?
Edit
Block Comments in a Shell Script has been suggested as a duplicate, but as you will notice, I need to expand ${procnm} in the here-doc; I just need to avoid the same happening to select *.
 
    