Return to BSD News archive
Received: by minnie.vk1xwt.ampr.org with NNTP id AA6873 ; Fri, 15 Jan 93 10:37:56 EST Path: sserve!manuel.anu.edu.au!munnari.oz.au!sgiblab!sdd.hp.com!elroy.jpl.nasa.gov!ames!olivea!uunet!ferkel.ucsb.edu!oinker!chupchup From: chupchup@ferkel.ucsb.edu (Robert Earl) Newsgroups: comp.unix.bsd Subject: Re: Differences with here documents Message-ID: <chupchup.727173903@oinker> Date: 16 Jan 93 08:45:03 GMT References: <1993Jan15.230023.5307@cm.cf.ac.uk> <1993Jan15.233635.6000@cm.cf.ac.uk> Organization: (EVIL!) Lines: 44 paul@isl.cf.ac.uk (Paul) writes: | In article <1993Jan15.230023.5307@cm.cf.ac.uk> paul@isl.cf.ac.uk (Paul) writes: | >I came across some problems with a script that worked on ultrix but not | >386bsd, it came down to differences in command expansion in here | >documents. The test prog I used was | > | >cat <<EOF | >$(CHNFILES) | >EOF | > | >which on 386bsd would give the following error. | > | >CHNFILES: command not found | I've looked at this a bit more since the above isn't what I wanted | after all. The problem is slightly more involved. This is a bit of the | original script : [ Here document is used to generate Makefile ] | On ultrix substitution doesn't take place when the word is in brackets, | whereas with ash and bash it does. You need to quote the "$" symbols that aren't supposed to be touched by the shell. On Ultrix, /bin/sh probably assumes that since "$(" is an invalid variable, it won't expand anything. However, ash and bash use "$()" for backquote-like command execution. Try something like: cat <<EOF foo=$bar baz=$stuff target: \$(CHNFILES) EOF This way you will get the expansion you need from most of the variables but not from "$(CHNFILES)". You might need to backslash "(" and ")" too, but this worked on SunOS /bin/sh. -- robert earl | rearl@ucsd.edu | Dyslexics of the world, untie! rearl@oinker.ucsb.edu |