>>
Wildcards, Quotes, Back Quotes and Apostrophes in shell commands
( * ? [] " ` ')
Now
I shall discuss the use of special characters such as " '
and ` in various commands that you type at the shell prompt. The
information given here is general and has to be followed when
typing any command.
" " (Double Quotes) : Suppress Expansion
Whenever you use double quotes (" ") the shell suppress
the filename expansion. Thus even if you use a wildcard such
as * but enclose it within double quotes you would not get the
standard feature of matching for all characters. I mean a command
such as
$ ls c*
would list all the files with the names beginning with the letter
' c ' . But a command such as
$ ls "c*"
would search for a file named ' c* '. There would be no expansion
of the * to match other letter sequences. The shell would expect
the filename to have the actual character * in its name. Thus
you would mostly get a 'No File Found error' message.
-
` (Back Quotes) : Command Substitution
The ` character (found on the key with the ~) is very important
when used in shell commands. This ` indicates that command
substitution is required wherever it is used. Hence whenever
` is used, whatever part of the command is enclosed by these Backquotes
marks would be executed (as if it was the only command) and then
the result of that command would be substituted in the original
shell command that you typed. The following explains this clearly
$ echo "The contents of this directory are " `ls
-l` > dir.txt
Note : Remember to use the ` (found on the key with the ~ and
NOT the one found next to the Enter button)
The above command would basically execute the ' ls -l 'part first
and then substitute the result after the string "The contents
of this directory are " and both of these together (directory
listing + the string) would be written to a file named dir.txt
Basically after command substitution the new substituted value
would act as additional parameter to the main command that was
present in your initial statement.
-
'
(Apostrophe Marks) : No Change
The ' character (found on the button next to the Enter button)
is a very powerful character whenever used in any shell command.
Basically the ' (apostrophe marks) disables all kinds of transformations
or modifications. It would consider whatever is enclosed with
the ' marks as a single entity i.e. a single parameter. Absolutely
no sort of substitution or expansion would take place.
$ echo '$HOME'
would produce at the output the string $HOME itself and would
not print the path to your home directory. Since the single quotes
prevents any sort of expansion, substitution and simple considers
whatever to be present as a simple parameter in itself.
Just so that you remember in case you had typed the following
$ echo `$HOME`
(with the backquotes) you would get an error stating that the
command not found. Since in this case the $HOME would be substituted
with the path to your home directory (suppose /home/david) and
the shell would try to execute the path as such. It would search
for a program named (such as) /home/david. Remember that backquotes
cause it to consider the part within the quotes to be considered
as separate command and the output of that command would be substituted
here. Hence in this case there is no command / program named as
/home/david. Thus you would get an error when bash tries to execute
that command
On the other hand when you type
$ echo "$HOME" or $ echo $HOME
You would get the expected output. i.e the path to your home directory
would be printed at the output.
Thus you are now familiar with forming various filenames using
wildcards. You would generally end up using the special characters
such as quotes when trying to make complex shell commands. With
this knowledge I hope you can get the shell to do some real good
stuff for you.