Kevin Fegan
Kevin Fegan

Reputation: 1290

Is "Dollar-sign" optional in powershell "$()"?

I've seen an example for setting the timestamps (creationtime, lastaccesstime, lastwritetime) of a file with powershell:

PS>$(get-item test.txt).lastwritetime=$(get-date "01/01/2020")

which seems to work.

This page: http://ss64.com/ps/syntax-operators.html about powershell operators says that "$( )" is a "SubExpression operator".

But it also seems to work without the "$" like:

PS>(get-item test.txt).lastwritetime=(get-date "01/01/2020")

and most powershell examples I've seen omit the "$" when using parenthesis.

So, is the "Dollar-sign" optional in powershell "$()" ? Or is there some difference with/without the "$" that I'm just not seeing.

Is "$()" and "()" actually 2 different operators that just happen to both be valid uses in the examples I have shown?

Upvotes: 3

Views: 1681

Answers (2)

Francois
Francois

Reputation: 893

You need the $ sign to denote a sub expression if you use multiple statements or the statement is embedded in a string. Parenthesis without the $ is just a grouping operator.

$($x = 1; $y =2; $x + $y).tostring() //3

($x = 1; $y =2; $x + $y).tostring() // invalid syntax

($x = 1 + 2).tostring() //3

"$(1 +2)"  //3

Upvotes: 3

JPBlanc
JPBlanc

Reputation: 72610

The first time I need of $() was inside a string :

$a = Get-Process "explorer"
Write-host "$a.Name" -> System.Diagnostics.Process (explorer).Name
Write-Host "$($a.Name)" -> explorer

I also use it each time I want PowerShell to force compute something first.

Upvotes: 0

Related Questions