53

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?

Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
ptpdlc
  • 643
  • 1
  • 5
  • 6

1 Answers1

49

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
Flup
  • 8,017
  • 2
  • 33
  • 50
  • 10
    Or even `echo "$hello and $goodbye".*` (mix variable expansions, spaces, and a glob in the same "word". – vonbrand Mar 13 '13 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? – CMCDragonkai Feb 05 '16 at 07: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. – LostBalloon Mar 10 '16 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)` – Steven Darnell Nov 03 '18 at 02:49