Reputation: 2937
I have a folder with 3 dummy files: ab0, ab1 and ab2.
$ echo ab*
ab0 ab1 ab2
$ myvariable=ab*
$ echo $myvariable
ab0 ab1 ab2
$ echo 'ab*'
ab*
Up to here, I think I understand. But:
$ myvariable='ab*'
$ echo $myvariable
ab0 ab1 ab2
I was expecting ab*
. This means that there is a basic that I don't understand.
I've been searching for single vs double quotes, expansion and more in bash tutorials and manuals but I don't get it yet.
Upvotes: 8
Views: 80
Reputation: 9925
BASH isn't performing the expansion during the assignment, its expanding when you run the echo
command. So with both kinds of quotes, you are storing the raw string ab*
to your variable. To see this behaviour in action, use quotes when you echo
as well:
hephaestus:foo james$ echo ab*
ab0 ab1 ab2
hephaestus:foo james$ var=ab*
hephaestus:foo james$ echo $var
ab0 ab1 ab2
hephaestus:foo james$ echo "$var"
ab*
hephaestus:foo james$ var='ab*'
hephaestus:foo james$ echo $var
ab0 ab1 ab2
hephaestus:foo james$ echo "$var"
ab*
hephaestus:foo james$
Upvotes: 2
Reputation: 4206
The line $ echo $myvariable
is being parsed by first substituting the contents of $myvariable
into the line, then running the line. So when the line is parsed by bash, it looks like $ echo ab*
.
If you $ echo "$myvariable"
, you will get the behavior you want.
Upvotes: 7