I am trying to compare two strings in a simple shell script.
I was using
/bin/sh instead of
/bin/bash, and after countless hours of debugging, it turns out sh (which is actually dash) can't handle this block of code:
if [ "$var" == "string" ] then do something fi
What is a portable way to compare strings using
/bin/sh? I know I can always do the opposite by using !=, but I am wondering about a cleaner, portable way.
dash is a very strict POSIX shell, if it work in
dash it is almost certain it would work in other POSIX shell.
if [ "$var" = "string" ] then some_command fi
Why is there even a possibility that your script will be run by the "wrong" shell? I would think you could make that a pre-requisite of your product by using the standard sh-bang line at the top of your script:
Even if a user uses a different shell, the other shells are generally still there and, if not, simply complain and state that they are a pre-req.
Exactly the same way that a specific kernel level, or the existence of awk, can be a pre-req.
For your specific question, I believe both
bash allow the single '=' to be used for string comparisons - that is POSIX behavior:
if [ "a" = "a" ] ; then echo yes fi yes