This is a very simple task in every language I have ever used, but I can’t seem to figure it out in PowerShell. An example of what I’m talking about in C:
abs(x + y)
The expression x + y is evaluated, and the result passed to abs as the parameter… how do I do that in PowerShell? The only way I have figured out so far is to create a temporary variable to store the result of the expression, and pass that.
PowerShell seems to have very strange grammar and parsing rules that are constantly catching me by surprise, just like this situation. Does anyone know of documentation or a tutorial that explains the basic underlying theory of the language? I can’t believe these are all special cases, there must be some rhyme or reason that no tutorial I have yet read explains. And yes, I’ve read this question, and all of those tutorials are awful. I’ve pretty much been relegated to learning from existing code.
In your case, simply surrounding the expression with parenthesis will allow you to pass it to your function.
You need to do this because PowerShell has more than one parsing mode depending on the beginning of the command.
Expression mode is similar to how most other languages parse – numbers are numbers and strings are quoted.
Command mode treats everything as a string except for variables and parenthesis. Strings here don’t need to be quoted.
You can mix modes in a single line by enclosing the commands with parenthesis.
You can see this effect if you define function abs in the following way: