shankar@hpclscu.HP.COM (Shankar Unni) (03/11/88)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%% YACW (Yet Another Csh Weirdness). %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I'm trying to set a shell variable to contain the output of a command.
For instance,
set myvar = `grep 'Compile' RESULTS`
This is what happens:
% ls
RESULTS bar bletch foo
% grep 'Compile' RESULTS
* Compile successful
% set line = `grep Compile RESULTS`
% echo $line
RESULTS bar bletch foo Compile successful
(!!)
Actually, I sort of understand (I think) what's going on here. The `` globs
the *. OK, OK. Now, how do I disable this globbing?
I've tried:
% grep .. > /tmp/XXX
% set line = `cat /tmp/XXX`
with the same results (obviously, as I see now..)
I finally had to do something gross like creating an awk script like
{print "set line='" $0 "'"}
and try
grep .. | awk -f awkscript > /tmp/YYY
source /tmp/YYY
(AAARGH!!)
Is there an easier (and more elegant) way to do this? I also tried setting
noglob (which was calmly ignored by the ``), so *that*'s not the answer
either..
(Almost makes me want to switch to "ksh" Hahhahhahhehheh..errr..)
ADVthanksANCE,
Shankar.enag@ifi.uio.no (03/13/88)
Shankar Unni <shankar@hpclscu.HP.COM> has a problem with file globbing within ``. Actually, the problem is not within ``. It is the order In which the the command line is interpreted that is your problem. In csh, the `` is obviously parsed and executed before file names are globbed. Thus there is no difference between echo * foo bar and echo `grep foo zot` if "grep foo zot" says "* foo bar". There should, therefore, be no difference between echo "* foo bar" and echo "`grep foo zot`" either, given the above match for foo. I think this has solved your problem, Shankar, unless, of course, you want "line" after set line = "`grep Compile RESULTS`" to be a list of three elements, instead of one element with embedded spaces, which is what this will give you. By the way, the csh I occasionally use here at the University of Oslo SunOS 3.4EXPORT installation does behave correctly (or, as you want it to) when I set noglob. (I did not find any version information in /bin/csh. It might have come with SunOS 3.2 or 3.3.) Erik Naggum ARPA: enag@ifi.uio.no (or erik%naggum.uucp@ifi.uio.no) UUCP: erik@naggum.se (or ...!uunet!naggum!erik) FONE: +47-2-384-800 (work), +47-2-549-163 (home) MAIL: Naggum Software, POB 1560 VIKA, 0118 OSLO, NO(R)WAY
shankar@hpclscu.HP.COM (Shankar Unni) (03/15/88)
I've received several replies, many of which pointed me in the right direction. The solution was to put the `..` inside double quotes. set line = "`...`" echo "$line" Thanx again to all who took the trouble to reply. Shankar.