Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!snorkelwacker!paperboy!meissner From: meissner@osf.org (Michael Meissner) Newsgroups: comp.unix.shell Subject: Re: Csh: first character of an arg is '-' Message-ID: Date: 7 Oct 90 04:28:30 GMT References: Sender: news@OSF.ORG Organization: Open Software Foundation Lines: 56 In-reply-to: jak@cs.brown.edu's message of 7 Oct 90 00:25:05 GMT In article jak@cs.brown.edu (Jak Kirman) writes: | Context: SunOS 4.1, /bin/csh | | I want to be able to test whether the first character of an argument to | a csh-script is '-'. The man page makes it sound like ~= should work | for this, but I could make no sense of that portion of the man page, and | was not able to find any case where the result of ~= was non-0 except | the trivial case where the right-hand side contained no wildcards and | was the same as the left... | | I do *not* want to have to exec a program; I want this to be fast. The standard trick that is used in the /bin/sh case is to use a case (read switch for csh) statement. For example: switch ($1) case -*: echo "$1 is an option." breaksw default: echo "$1 is not an option." breaksw endsw | Please do not tell me to use sh -- I know it is better for scripts, but | the syntax is rather arcane, and I don't have the time to learn it right | now, although eventually I will probably have to. If you are quite | certain this is not possible in csh, but it is in sh, I would appreciate | a quick example of sh usage. /bin/sh is more arcane than csh? Surely thou jestest...... Any interpreter that requires spaces to be exactly right is a hack, and not an integrated language. Ok, ok, enough with the csh taunting. Here is the way to do it with the one true shell (whoops :-): case "$1" in -*) echo "$1 is an option.";; *) echo "$1 is not an option.";; esac | As an aside, is there any way to find the first character of a word in | csh or sh? If you don't mind enumerating the possibilities, the case/switch example is one such approach. In musty, ancient versions of /bin/sh that don't have test built in (ie, Ultrix, true BSD 4.[23], etc.), case is a faster way of testing for equality than test (aka, '['). -- Michael Meissner email: meissner@osf.org phone: 617-621-8861 Open Software Foundation, 11 Cambridge Center, Cambridge, MA, 02142 Do apple growers tell their kids money doesn't grow on bushes?