What is the difference between single quotes and double quotes in bash

When you are writing shell scripts or typing out commands in bash, you might have noticed that you can use either the single quotes (‘) or the double quotes (“) with most commands. This is true not just with scripts but with all bash commands as well. But there is a difference between the two types of quotes, single vs double quotes and how the bash shell interprets it.

In the simplest of words, the bash shell will interpret the enclosing text inside the single quotes literally and will not interpolate any part of the text such as variables. In the case of the double quotes the bash shell will evaluate the enclosing string and transform the text when appropriate such as variables, escape characters, backticks etc. We will take a look at some examples later in order to clarify this further.

Double Quotes

Let’s look at double quotes first. When you enclose a string with in the double quotes, the literal values of all the characters are preserved except for the $ (dollar sign), ` (backtick), \ (backslash) and ! (exclamation mark). These 4 characters have special meaning in bash shell and is interpreted differently.

The dollar sign ($) indicates that the characters following it is a variable name and should be replaced with the value of that variable.

The backslash (\) is used to escape other characters, and has special meaning when followed by certain other characters such as $ (dollar), \ (backslash), ” (double quotes), ` (backtick) or the new line.

$ echo "$PATH"

Single Quotes

When you enclose a string or a set of characters in single quotes, then all the characters in the string are interpreted literally and do not have any special meaning. This is useful when you do not want to use the escape characters to change the way the bash interprets the input string.

$ echo '$PATH'

double and single quotes in bash

You can mix and match the single and double quotes in bash commands, especially if you have multiple arguments to the command. You can have one argument with single quotes and another with double quotes. Each of those arguments will be interpreted differently according to the quotes used.

You can use the simple echo command to see the difference between the two quotes. If you do not use any quotes then the string will be interpreted, just as you have used the double quotes.

Sometimes, you may find that the command you are executing is not working as you were expecting. Using the echo command to print out the command as in the example above will allow you to see if the command is getting interpreted just the way you intended. This is a good and easy way to do some troubleshooting or debugging in the bash shell.