On Fri, Mar 18, 2005 at 03:42:28AM +0300, Dmitry Yakovkin wrote: > Hi everybody, > > I'm about to bang my head on the nearest wall, would you please point > me to my mistake. > > Problem: I need to send scripted email with additional headers (like: > mail -a "Mime-version: 1.0" recipient@somewhere.org) > > Okay, it works beautifully from an interactive prompt: > mail -a "Mime-version: 1.0" -a approved:listpass -s "Test subject" > mylist@mysite.com > > now I want to do that from inside a shell script: > Hi Dmitry. Once the quotes are stuffed into the variable, they lose any special meaning to the shell, especially the effect of preventing word splitting. So once you set a variable to VAR="bla 'blip blop' bla morebla" there will be five words, regardless of any occurrences of ' or " therein. I'd suggest using an array. Assign your options this way: MAIL_OPTS=(-a "Mime-version: 1.0" -a Approved:mypassword) This constructs MAIL_OPTS as an array, containing four words (here the quote prevents word splitting): ${MAIL_OPTS[0]} -a ${MAIL_OPTS[1]} Mime-version: 1.0 ${MAIL_OPTS[2]} -a ${MAIL_OPTS[3]} Approved:mypassword Later you have to expand the array with [...] "${MAIL_OPTS[@]}" [...] This expands the whole array, and esp. _each array member to its own word_ - no more and no less. Exactly what you want. Take care that neither the two different types of brackets nor the double quotes around the expansion are optional - it's all required. See the bash(1) manpage, Section "Arrays". :) Regards, Jan -- Jan C. Nordholz <jckn At gmx net>
Attachment:
signature.asc
Description: Digital signature