LinuxQuestions.org
Help answer threads with 0 replies.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices

Reply
 
Search this Thread
Old 10-13-2008, 03:12 PM   #1
gchilders
LQ Newbie
 
Registered: Oct 2008
Posts: 4

Rep: Reputation: 0
Evaluate strings as case-insensitive


In DOS batch scripts, I used to be able to compare strings in a case-insensitive way such as:

IF /I "TEST" EQU "test" echo Matched!
IF /I "Test" EQU "test" echo Matched!

But in bash, this will always fail:

if [ "TEST" = "test" ]; then echo "Matched"; fi
if [ "Test" = "test" ]; then echo "Matched"; fi

Is there a straightforward way to make "if" evaluate the strings as case-insensitive?

Thanks,
 
Old 10-13-2008, 03:32 PM   #2
CRC123
Member
 
Registered: Aug 2008
Distribution: opensuse, RHEL
Posts: 374
Blog Entries: 1

Rep: Reputation: 31
the 'tr' (transform) command can do this. I don't know how the structure of your if statement is, but it seems you may be comparing two variables, so you can do a tr statement like so:
Code:
VAR1="TEST"
VAR2="test"

if [ `echo $VAR1 | tr [:upper:] [:lower:]` =  `echo $VAR2 | tr [:upper:] [:lower:]` ]; then
echo "Matches"
fi
That should do the trick.
 
Old 10-13-2008, 03:33 PM   #3
bigrigdriver
LQ Addict
 
Registered: Jul 2002
Location: East Centra Illinois, USA
Distribution: Debian Squeeze
Posts: 5,745

Rep: Reputation: 301Reputation: 301Reputation: 301Reputation: 301
Quote:
man bash | grep -A 4 -B 4 -i case
This will turn up references in man bash relasting to nocasematch and nocaseglob.

I'm a bit rushed now, so I'll leave it to you to research the bash man pages for more info.
 
Old 10-13-2008, 03:36 PM   #4
colucix
Moderator
 
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,458

Rep: Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941Reputation: 1941
Another way is to force the shell to do a case insensitive comparison:
Code:
#!/bin/bash
shopt -s nocasematch

if [[ "TEST" = "test" ]]
then
  echo "Matched"
fi

shopt -u nocasematch
shopt -s sets the option, whereas shopt -u disables it.

Edit: beaten by bigrigdriver!
 
Old 10-13-2008, 04:27 PM   #5
gchilders
LQ Newbie
 
Registered: Oct 2008
Posts: 4

Original Poster
Rep: Reputation: 0
tr works perfectly

Thanks, CRC123

Your solution worked perfectly for my needed syntax:

if [ `echo $VAR1 | tr [:upper:] [:lower:]` = `echo $VAR2 | tr [:upper:] [:lower:]` ]
then CHECK=1
fi

I kind of knew I had to use tr, but couldn't quite get the syntax right. Thanks for your helpful response.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
how to search in VI wih case insensitive lordofring Programming 7 11-16-2011 08:11 AM
Copying files from case-sensitive Linux to case-insensitive Windows via CIFS? SlowCoder Linux - General 4 05-07-2008 07:03 PM
Case-insensitive CVS? sundialsvcs Programming 2 06-25-2006 10:01 AM
SuSE's less(1) is always case insensitive: how to disable? wirawan0 Suse/Novell 1 01-25-2006 12:10 PM
case insensitive search command ColKurtz Linux - Newbie 4 01-20-2005 07:02 AM


All times are GMT -5. The time now is 02:25 AM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration