bash中dirname "$0"写法在PowerShell中的等效实现是什么
PowerShell 中对应 bash
dirname "$0" 的等效实现 PowerShell 内置了专门的自动变量实现相同能力,无需额外调用命令解析路径:
- 主流版本(PowerShell 3.0及以上,覆盖当前所有在用的正式版本)直接使用自动变量
$PSScriptRoot即可,该变量会自动返回当前执行脚本所在目录的绝对路径,和 bash 里dirname "$0"的作用完全对应。
对应给出的两个bash常用写法,PowerShell的等效实现如下:
- 切换工作目录到脚本所在路径(对应bash
pushd "$(dirname "$0")"):
# pushd是PowerShell中Push-Location命令的默认别名,可直接调用 pushd $PSScriptRoot
- 拼接脚本目录下的子目录路径(对应bash
data_dir="$(dirname "$0")/data/"):
# 推荐写法:用Join-Path拼接路径,自动适配Windows/macOS/Linux的路径分隔符,兼容性更强 $data_dir = Join-Path $PSScriptRoot "data/" # 直接字符串拼接的写法在绝大多数场景也能正常运行 $data_dir = "$PSScriptRoot/data/"
老版本兼容提示:如果需要适配早已停止支持的PowerShell 2.0环境(该版本无内置
$PSScriptRoot变量),可以用以下写法获取脚本所在目录,该写法在新版本PowerShell中也可正常运行,只是写法更繁琐:$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
内容的提问来源于stack exchange,提问作者minhee
相关产品推荐
相关产品推荐

