Finding the last arg
    Dan Mercer 
    mercer at npdiss1.StPaul.NCR.COM
       
    Wed Jan  2 10:42:51 AEST 1991
    
    
  
In article <1990Dec27.154917.14751 at virtech.uucp> cpcahil at virtech.UUCP (Conor P. Cahill) writes:
:In article <18476 at shlump.nac.dec.com> lan_csse at netrix.nac.dec.com (CSSE LAN Test Account) writes:
:>The obvious thing to try is some sort of expression combining $# with ${},
:>e.g. ${$#}.  This gets a syntax error.  The simpler $$# is valid, but it
:
:Try:
:	eval \$$#
:
:-- 
:Conor P. Cahill            (703)430-9247        Virtual Technologies, Inc.,
:uunet!virtech!cpcahil                           46030 Manekin Plaza, Suite 160
:                                                Sterling, VA 22170 
Obviously this fails for $# > 9.  So you need some form of shift,
preferably forking and execing as few processes as possible (nice to
avoid expr).  You'd also like to preserve the current args.  So try
this:
args="$@"      # get arglist
argno=$#       # and number of current args
export args argno
last=`set -- spacer $args   # set as args - add spacer to eliminate expr
shift $argno          # shift over
echo $1`
This works if args contains no args with embedded whitespace - if that
is a possibility,  then expr must be used.
args="$@"
export args argno
last=` set -- spacer $args
shift \`expr $# - 1\`
echo $1`
echo $last
But this also fails if last arg may contain whitespace.  Oh well!
-- 
Dan Mercer
NCR Network Products Division      -        Network Integration Services
Reply-To: mercer at npdiss1.StPaul.NCR.COM (Dan Mercer)
"MAN - the only one word oxymoron in the English Language"
    
    
More information about the Comp.unix.shell
mailing list