Today I learned: Using “expr :” for string comparison in sh

While debugging a Makefile so a problem with linking openssl, I encountered the followed if expr syntax:

  dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; extras=; \
  base=-Wl,--enable-auto-image-base; \
  if expr $(PLATFORM) : 'mingw' > /dev/null; then \
    case $(LIBNAME) in \

What does if expr $(PLATFORM) : 'mingw' do? And why output to /dev/null

expr 'string' : 'string' returns a non-zero value and prints a zero if the strings do not match and returns a zero and prints the length of the strings if the strings do match. The output is redirected to /dev/null because there really isn’t any benefit to the output since the return code is used in the if statement.


Leave a Reply

%d bloggers like this: