PowerShell字符串格式在函数内的不同行为

问题描述

在使用powershell时,我很难从两个变量构建文件名。当我最初阅读powershell脚本时,它运行良好。现在,我尝试将一些可重复的步骤移至函数中,但是字符串的行为有所不同。

MWE:

$topa = "ABC"
$topb = "XYZ"

function Test-Fun{
    param(
        $a,$b
        )
    echo "$($a)H$($b).csv"
}

echo "$($topa)H$($topb).csv"

Test-Fun($topa,$topb)

我系统上的输出

ABCHXYZ.csv
ABC XYZH.csv

最初,我想使用下划线代替H,并认为这是引起问题的原因,但并非如此。我错过了什么,或者更确切地说,在函数内部和外部的字符串扩展之间有什么区别?

解决方法

您打错Test-Func$topa之后的逗号将创建一个数组,因此您基本上将[]“ ABC”,“ XYZ”作为 array 传递给$a。在这种情况下,$b为空!

您可以通过删除逗号(也不需要括号)轻松解决此问题:

Test-Fun $topa $topb