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.
Overall, Bash is relatively easy to learn. Most students can learn basic, intermediate, and advanced commands within six months.
bash [filename] runs the commands saved in a file. $@ refers to all of a shell script's command-line arguments. $1 , $2 , etc., refer to the first command-line argument, the second command-line argument, etc. Place variables in quotes if the values might have spaces in them.
$_ (dollar underscore) is another special bash parameter and used to reference the absolute file name of the shell or bash script which is being executed as specified in the argument list. This bash parameter is also used to hold the name of mail file while checking emails.
The biggest advantage to learning Bash is that it's so widely used. Even if you're working in another programming language like Python or Ruby, it's worth learning Bash because many languages support Bash commands to pass data and information to and from your computer's OS.
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.
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$
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With