Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Is there a Korn shell data type equivlent to Pascal sets?

Posted on 2013-01-09
6
Medium Priority
?
286 Views
Last Modified: 2013-01-18
I know! It's just wishful thinking. Just thought I'd put it out there.

I have a situation for which, if I could use Pascal, I'd define a set type and declare a set variable which I could reference in a construct similar to the following...

SOMETHING = (me, myself, I)
SET = set of SOMETHING
THIS: SET
THAT: SET
readln(THIS)
if THIS in THAT; then...

My Pascal is a little rusty, but...

What I'm trying to do is determine whether one number is included in a set of other numbers. So far, all I've come up with is the case statement:

case $NUMBER in
  1|5|9|21|34) Do something or do nothing, as it were...
0
Comment
Question by:babyb00mer
6 Comments
 
LVL 31

Expert Comment

by:farzanj
ID: 38760309
How about?

set="1 5 9 21 34"
if $(echo $set | grep -q "\b$NUMBER\b")
then
     echo do something
fi

Open in new window

0
 
LVL 85

Expert Comment

by:ozo
ID: 38760365
SET='^(1|5|9|21|34)$'
[[ $NUMBER =~ $SET ]] && Do something

SET=" 1 5 9 21 34 "
[[ $SET =~ " $NUMBER " ]] && Do something
0
 

Author Comment

by:babyb00mer
ID: 38760586
Hmm. I've never seen the '=~' operator. Unfortunately, it doesn't look like my versions of the Korn shell will accept it. I apologize. I forgot to mention that I'm running on AIX 5.3 and 6.1.
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 85

Expert Comment

by:ozo
ID: 38760615
Does your version of ksh support this?

SET=" 1 5 9 21 34 "   
[[ ${SET/ $NUMBER } != $SET ]] && Do something
0
 
LVL 68

Expert Comment

by:woolmilkporc
ID: 38760734
SET=" 1 5 9 21 34 "   
NUMBER=34
if [[ $(expr index "$SET" "$NUMBER") -ne 0 ]] then
 echo Found. Do something.
   else
      echo Not found. Do nothing.
fi

or

SET=" 1 5 9 21 34 "
NUMBER="34"
if [[ "$SET" == *"$NUMBER"*  ]] then
 echo Found. Do something.
   else
      echo Not found. Do nothing.
fi

Unfortunately, the above will also match with e. g. NUMBER="3" (but at least the second one will not match with NUMBER=" 3 "), so I think farzanj's solution is best (so far), but without "\b", because our grep doesn't understand this syntax. Use "-w" (word match) instead:

... grep -wq "$NUMBER" ...
0
 
LVL 85

Accepted Solution

by:
ozo earned 2000 total points
ID: 38760856
SET=" 1 5 9 21 34 "
[[ "$SET" == *" $NUMBER "*  ]]
 will not match with NUMBER="3"
nor will
SET="1|5|9|21|34"
[[ $NUMBER == $SET  ]]
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Using libpcap/Jpcap to capture and send packets on Solaris version (10/11) Library used: 1.      Libpcap (http://www.tcpdump.org) Version 1.2 2.      Jpcap(http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/index.html) Version 0.6 Prerequisite: 1.      GCC …
How to remove superseded packages in windows w60 or w61 installation media (.wim) or online system to prevent unnecessary space. w60 means Windows Vista or Windows Server 2008. w61 means Windows 7 or Windows Server 2008 R2. There are various …
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
Suggested Courses

886 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question