52

This will be an easy one, but in my memories, when shell scripting, using double quotes would allow expanding globbing and variables.

But in the following code:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

I get this result:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

So single quoting prevent glob AND variable expansion but double quoting allows only variable expansion and no globbing?

Can I glob in any quoting pattern?

1 Answer 1

48

You are correct: globbing doesn't work in either single- or double-quotes. However, you can interpolate globbing with double-quoted strings:

$ echo "hello world" *.sh "goodbye world"
hello world [list of files] goodbye world
4
  • 10
    Or even echo "$hello and $goodbye".* (mix variable expansions, spaces, and a glob in the same "word".
    – vonbrand
    Mar 13, 2013 at 13:57
  • 1
    Globbing doesn't seem to work in this case, echo /path/to/file/*${variable}. How do I glob while appending an interpolated email? Feb 5, 2016 at 7:36
  • 4
    @CMCDragonkai echo "$FOLDER_PATH"/*.extension works fine for me, contrary to the accepted answer, I had to remove the whitespace between the " and the *. Hope it helps. Mar 10, 2016 at 18:50
  • @CMCDragonkai, @LostBalloon I use the following pattern when I want to use globs with variables that may have spaces: (cd "$FOLDER_PATH" && echo *.extension) Nov 3, 2018 at 2:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.