Question:
Here’s a very simple example script:
1 2 3 4 5 6 7 |
function fun () { "AAA $args ZZZ" } fun a b c fun a - b fun a -- b fun a '--' b fun a --- b |
The result I get is:
1 2 3 4 5 6 |
AAA a b c ZZZ AAA a - b ZZZ AAA a b ZZZ AAA a -- ZZZ AAA a --- b ZZZ |
I apparently need to escape the double dash. Why?
I’m writing a powershell wrapper for a suite of scripts and some of those scripts assign a specific meaning to “–“. How can I pass it through unmodified?
Answer:
— is considered a special “end-ofparameters” parameter.
From Bruce Payette’s Windows PowerShell in Action:
The quotes keep the parameter binder from treating the quoted string as a parameter.
Another, less frequently used way of doing this is by using the special “end-ofparameters”
parameter, which is two hyphens back to back (–).
Everything after this sequence will be treated as an argument, even if it looks like a parameter. For example, using — you can also write out the string -InputObject without using quotes:
1 2 |
PS (3) > Write-Output -- -InputObject |
Will result in -inputobject as the output.