if/else comparison with wildcard


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
if/else comparison with wildcard

This might be a simple answer but I can't for my life figure it out. If I input "bat", how do I get the condition to pick it up with the wild card *at*.

Code:
#!/bin/bash

read -p "enter" BOO

if [ $BOO = '*at*' ]; then
        echo "you win"
else
        echo "you lose"
fi

# 2  
Use double bracket, and no quotes round wild cards. The double brackets are interpreted by Bash (or Kshell if using ksh) and they both interpret the right hand side of the expression as a pattern:

Code:
#!/bin/bash

read -p "enter: " BOO

if [[ $BOO = *"at"* ]]; then   # quotes here optional
        echo "you win"
else
        echo "you lose"
fi

This User Gave Thanks to agama For This Post:
# 3  
Quote:
Originally Posted by agama
Use double bracket, and no quotes round wild cards. The double brackets are interpreted by Bash (or Kshell if using ksh) and they both interpret the right hand side of the expression as a pattern:

Code:
#!/bin/bash

read -p "enter: " BOO

if [[ $BOO = *"at"* ]]; then   # quotes here optional
        echo "you win"
else
        echo "you lose"
fi

What's the problem if single bracket is used?
# 4  
Quote:
Originally Posted by cola
What's the problem if single bracket is used?
The open single bracket is a symlink to the test command. Shells (Ksh, bash) must treat it as an external command, and thus all of the command line is treated as an external command. Therefore, wildcards, unquoted, are expanded in the same manner as would be on any other command: as matching files in the filesystem. Quoted wildcard characters are treated as literals and passed to test which treats them as literals. So executing the following code takes the false branch:

Code:
if [ foo = "*o" ]
then
    echo "seemingly broken because this doesn't echo"
else
    echo "this will echo because * is interpreted literally by test"
fi

While this if statement takes the expected true branch:
Code:
if [[ foo == *"o" ]]

Beyond those differences, the double square bracketed expressions are interpreted by the shell, and no fork/exec overhead is needed, so they are much more efficient than using a single bracket.

Once in a long time does it make sense to use a single bracket expression (except when needing to write a pure bourn shell script), and even then I'd question its use.
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

10 More Discussions You Might Find Interesting

1. OS X (Apple)

Help with wildcard

CD_numb is AM017 this code: set the_Firstcom_CD to (do shell script "ls -d '/volumes/audioNAS/Firstcom/Access Music/' ") & CD_numb gives me this: "/volumes/audioNAS/Firstcom/Access Music/AM017" the item I am looking for is AM017Q. I can get the "*" syntax right so it never finder... (7 Replies)
Discussion started by: sbrady
7 Replies

2. Shell Programming and Scripting

Wildcard in ls

Hi Experts, I want to use ls in the below form: ls -l *.{txt,TXT} (working fine) but when i am declaring a variable, VAR="*.{txt,TXT}" ls -l $VAR is not working. Please help. Thanks. (4 Replies)
Discussion started by: sugarcane
4 Replies

3. Shell Programming and Scripting

Sed Wildcard

Hello, I apologize for asking what is probably a simple question but I have been unable to understand the other posts on the topic. I have a file that has the following several lines: ABC DEF GH:IJKLMNOP_QRS_TUV_11112012_ABCL5 ABC DEF GH:IJKLMNOP_QRS_TUV_11112013_ABCL4 ABC DEF... (4 Replies)
Discussion started by: MolecularToast
4 Replies

4. Shell Programming and Scripting

wildcard help!!

i have got heaps of files (.pdf, .txt and .doc) files in one folder, i am making a program in PERL that helps me find the files i want easier using shell wildcard, something like this!! print "Enter a pattern: (must be in )"; $input = <STDIN>; if (The input is in and valid wildcard... (3 Replies)
Discussion started by: bshell_1214
3 Replies

5. Shell Programming and Scripting

How to use wildcard * in if?

Hi, Can anyone help me how to use * in if statement. File contains below line1:a|b|c|Apple-RED| line2:c|d|e|Apple-Green| line3:f|g|h|Orange| I need to find line by line 4th field contains 'Apple' or not. Please help me at the earliest. (6 Replies)
Discussion started by: jam_prasanna
6 Replies

6. UNIX for Advanced & Expert Users

wildcard help

Can someone please explain the wildcards in this. How is this recursive? When I put this in my terminal it recursively displayed everything. ls .* * (6 Replies)
Discussion started by: cokedude
6 Replies

7. Shell Programming and Scripting

wildcard

Hi, I have this code to search all "cif" files using wildcard for file in *.cif do grep "Uiso" $file | awk '{ print $3, $4, $5 }' > tet done I get this error "grep: *.cif: No such file or directory" Please where am I going wrong!!! Thank you in advance (6 Replies)
Discussion started by: princessotes
6 Replies

8. Shell Programming and Scripting

Wildcard comparison

Just a quick question: if I want to do a comparison with a wildcard in a shell script, do i just use '*'? Heres what I have: elif ; then continue but that doesnt evaluate right. It tries to compare against the literal '/apps*' instead of anything that begins with '/apps' (2 Replies)
Discussion started by: rdudejr
2 Replies

9. UNIX for Dummies Questions & Answers

wildcard

what will the cmd below do? ls *.3 1 members mentions that to seek all permutations and combinations of the mp3 extension ill have to use curly braces, {} and not, . what then will do? (13 Replies)
Discussion started by: abhi
13 Replies

10. UNIX for Dummies Questions & Answers

Find wildcard .shtml files in wildcard directories and removing them- How's it done?

I'm trying to figure out how to build a small shell script that will find old .shtml files in every /tgp/ directory on the server and delete them if they are older than 10 days... The structure of the paths are like this: /home/domains/www.domain2.com/tgp/ /home/domains/www.domain3.com/tgp/... (1 Reply)
Discussion started by: Neko
1 Replies

Featured Tech Videos