Topic: Quotes and Strings, and Their Rules
Notice: This post is a part of the PowerShell Monday series — a group of quick and easy to read mini lessons that briefly cover beginning and intermediate PowerShell topics. As a PowerShell enthusiast, this seemed like a beneficial way to ensure those around me at work were consistently learning new things about Windows PowerShell. At some point, I decided I would share these posts here, as well. Here’s the PowerShell Monday Table of Contents.
Today, I’d like to share how to handle quotes in a string. A string is any group of alphanumeric characters to include any punctuation. Think of a string as a sentence, or a word. A string, at its smallest component, can be a single letter, a number, or as mentioned, punctuation. Yes, numbers can be strings too, although they lose their numeric properties.
It is recommended to always use single quotes to encapsulate a string, unless there’s a need for double quotes (they have a special purpose). This is considered best practice by the PowerShell community. The first example string has no internal, interruptive punctuation, such as another single quote, or apostrophe.
$String = 'A string without any quotes.' $String A string without any quotes.
The next example string uses internal, double quotes. They are non-interruptive in this instance, because the string begins and ends with single quotes.
$String = 'A string with "double" quotes.' $String A string with "double" quotes.
This next example includes both single and double quotes inside a string, that begins and ends with single quotes. Notice that to do this, we needed to put two side-by-side single quotes, around the word single.
$String = 'A string with ''single'' and "double" quotes.' $String A string with 'single' and "double" quotes.
One of the things that you might expect to work, is escaping the single quotes instead of using side-by-side single quotes. This doesn’t work.
$String = 'This is a string with `'single`' and "double" quotes.' At line:1 char:36 + $String = 'This is a string with `'single`' and "double" quotes.' + ~~~~~~~~ Unexpected token 'single`'' in expression or statement.
Although I said to use single quotes to encapsulate a string, you can use double quotes if you have internal single quotes, or apostrophes, and you don’t want to use side-by-side single quotes.
$String = "I'm only using 'single' quotes in this string." $String I'm only using 'single' quotes in this string.
The final reason you might use double quotes is when you want to expand, or display, the value stored in a variable(s) inside your string. You can’t do this with single quotes. Notice in the below example that we’re using side-by-side double quotes in this string.
$Word1 = 'string' $Word2 = 'quotes' $String = "This is a $Word1 with 'single' and ""double"" $Word2." $String This is a string with 'single' and "double" quotes.
Bonus: Back to escaping, you can escape double quotes, so the example above could have been written like the example below, and therefore, not required using side-by-side double quotes. Don’t forget about apostrophes in your contractions (I’m, don’t, aren’t, etc.). You’ll need to determine a way around those as you create strings where they’re included.
$String = "This is a $Word1 with 'single' and `"double`" $Word2." $String This is a string with 'single' and "double" quotes.
And with that, the third PowerShell Monday is complete. As mentioned previously, please let me know if there’s something you’d like to see discussed.