String == isn't working in [[-test


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting String == isn't working in [[-test
# 1  
Old 07-14-2012
Question String == isn't working in [[-test

Hi.
I'm new to this forum, my English perhaps is not so good, but here is my question:
In bash you can use [[ ]] for tests, and how I understand it the variable names should be expanded automatically. So this should give "yes":
Code:
xx=hello
$ [[ xx == hello ]] && echo yes || echo no
no # not giving "yes"

These two are however working:
Code:
$ [[ $xx == hello ]] && echo yes || echo no
yes # correct
# and
nn=77
$ [[ nn -eq 77 ]] && echo yes || echo no
yes # correct

Why isn't the variable expansion working for strings? Or I missed something?
# 2  
Old 07-14-2012
The expression that is contained within double braces can take many forms, but the general syntax is one of

Code:
<operator> <string>

or
Code:
<operator> <filename>

or
Code:
<string> <operator> <pattern>

Because the strings and filenames do not need to be quoted, there is no way for the interpreter to determine whether xx is a string or a variable name that should be expanded. Thus, you must explicitly dereference the variables you wish to have expanded as you have done in your first working example.

This is different than in arithmetic expressions (( expression )) where the interpreter can assume that any string references are variable names to be evaluated as such.

You might want to read over the information here:
Bash Reference Manual
# 3  
Old 07-16-2012
Thanks for your answer, it's kind of obvious if you think about it.
I have read the manual earlier but I misunderstood this part:
Quote:
[[...]]
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional expression expression. Expressions are composed of the primaries described below in Bash Conditional Expressions. Word splitting and filename expansion are not performed on the words between the ‘[[' and ‘]]'; tilde expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution, and quote removal are performed. Conditional operators such as ‘-f' must be unquoted to be recognized as primaries.
I understood "parameter and variable expansion ... are performed" as that they are automatically expanded like it is for (( ... )) , my bad
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. HP-UX

Syslog daemon isn't working

Hi All, I've tried starting syslogd on our hp-ux 11.31 server. However, it is not getting started nor it is updating the syslog file. There is no space issue also. However, the mail.log file is approx 2GB, can that be of any issue. Please find the details below: # /sbin/init.d/syslogd... (2 Replies)
Discussion started by: Kits
2 Replies

2. Shell Programming and Scripting

export of a variable isn't working

Hi I want export input data ... echo "month: " read m export m=$m also export m is not working ? the month-variable should be exportet for the use in other scripts, but it is not working like this. What i'm doing wrong? Thanks in advance! IMPe (10 Replies)
Discussion started by: IMPe
10 Replies

3. Shell Programming and Scripting

crontab - runninf a java script just isn't quite working...

hi gurus. I have a little script that runs java from a certain directory. This script runs fine when run manually but when I try to schedule it, it fails to find the script. little_script.sh.. /<directory of java>/java -classpath... (3 Replies)
Discussion started by: MrCarter
3 Replies

4. Shell Programming and Scripting

awk isn't working

awk 'BEGIN{print '1.2449'**0.5}' awk: line 1: syntax error at or near * can someone help me troubleshoot the above command? i'm trying to do the square root of 1.2449. this command works on Red Hat, but for some reasonn isn't working on kubuntu (latest version). shell is bash. i... (3 Replies)
Discussion started by: SkySmart
3 Replies

5. Shell Programming and Scripting

How to check weather a string is like test* or test* ot *test* in if condition

How to check weather a string is like test* or test* ot *test* in if condition (5 Replies)
Discussion started by: johnjerome
5 Replies

6. Shell Programming and Scripting

Test on string containing spacewhile test 1 -eq 1 do read a $a if test $a = quitC then break fi d

This is the code: while test 1 -eq 1 do read a $a if test $a = stop then break fi done I read a command on every loop an execute it. I check if the string equals the word stop to end the loop,but it say that I gave too many arguments to test. For example echo hello. Now the... (1 Reply)
Discussion started by: Max89
1 Replies

7. Shell Programming and Scripting

a very basic sed one-liner...that isn't working :-(

Greetings all. :) I would like to use sed to join all non-blank lines together in a particular file. I was thinking I could do this by simply replacing the terminating, new-line character on every line which is not blank, but I must be missing something in my sed line: $ sed... (3 Replies)
Discussion started by: SteveB-in-LV
3 Replies

8. UNIX for Dummies Questions & Answers

Why isn't this working? tsch-doit file

#! /usr/tsch foreach f (`cat contacts.list`) awk '{printf ($2 in a) ? ","$5 : (NR>1) ? RS $2 FS $5 : $2 FS $5; a} END{print e}' $f > $f_inter.map end My file: cat contacts.list is just a list of files. I get this error: doit_contacts2intermap.sh: Command not found. Thanks! (1 Reply)
Discussion started by: lost
1 Replies

9. UNIX for Dummies Questions & Answers

Which Sendmail version ? and why -d isn't working

Hi, I am trying to figure out which version I am running of sendmail, but I am buffed. This is what I get sendmail -d0.1 -bt < /dev/null sendmail: illegal option -- d Telneting to my host: ~]$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is... (1 Reply)
Discussion started by: saariko
1 Replies

10. Solaris

grep -r isn't working

Hi, I was trying to use this particular option of grep grep -r 'Search_pattern' * This command should ideally search all the occurrences of Search_pattern recursively within a directory & print it on shell prompt. But this command is not doing what is expected. It just displays nothin! ... (8 Replies)
Discussion started by: harishmitty
8 Replies
Login or Register to Ask a Question