56

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

52

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .