我正在尝试从脚本中的用户主目录中获取目录。这就是我正在尝试的,但是~
它作为文字进行交互,而不是扩展到主目录。有没有办法让它扩展?如果没有,我可以通过其他方式获取主目录吗?
$mySourceDir = "~/Projects/svn/myProject/trunk" # Single quote also does not expand
cd $mySourceDir
这是在 OSX 上使用 PS 6 测试版。
我正在尝试从脚本中的用户主目录中获取目录。这就是我正在尝试的,但是~
它作为文字进行交互,而不是扩展到主目录。有没有办法让它扩展?如果没有,我可以通过其他方式获取主目录吗?
$mySourceDir = "~/Projects/svn/myProject/trunk" # Single quote also does not expand
cd $mySourceDir
这是在 OSX 上使用 PS 6 测试版。
在 PowerShell 中,引用当前用户主目录的最可靠方法是使用自动变量$HOME
,"..."
如果它是更大路径的一部分:
$mySourceDir = "$HOME/Projects/svn/myProject/trunk"; Set-Location $mySourceDir
(Set-Location
是 PowerShell 的cd
等价物;但是,由于内置别名定义,您也可以使用cd
。)
如果您将路径作为参数传递给command,您可能可以在没有封闭的情况下逃脱"..."
,具体取决于路径包含的字符;例如,
Set-Location $HOME/Desktop
适用于 Windows 和 Unix 平台,而如果您尝试使用环境变量,例如$env:HOME
,平台差异就会浮出水面。
要了解 PowerShell 定义的所有自动变量(内置变量),请参阅概念about_Automatic_Variables
帮助主题(在撰写本文时,描述$HOME
仅反映了Windows的观点,但$HOME
在 Unix 平台上的工作方式类似)。
~
仅当您确定当前位置是文件系统位置时才使用:
当前位置是 PowerShell 对当前目录的概括概念:PowerShell 概括了驱动器的概念,以包括其他(通常)分层数据存储,例如 Windows 注册表、所有已定义函数的目录(驱动器Function:
)、变量(Variable
)或环境变量 ( Env:
)。
每个这样的驱动器都由驱动器提供者提供,文件系统[驱动器提供者] 只是其中一个实例。
~
是特定于驱动器提供者的概念,因此仅使用~
,而不明确引用驱动器提供者,是指由当前位置基础的提供者定义的主位置。
~
,导致尝试使用它失败;例如,Environment
驱动器提供者及其Env:
驱动器就是这种情况:Set-Location Env:; Set-Location ~
导致错误Home location for this provider is not set. To set the home location, call "(get-psprovider 'Environment').Home = 'path'
翻译是驱动提供者~
,所以~
也在里面'...'
工作"..."
Set-Location ~/Desktop
Set-Location "~/Desktop"
Set-Location '~/Desktop'
bash
,在目标命令看到它之前,它是在前面扩展的shell~
,但前提是它是unquoted。尝试
$mySourceDir = "$env:HOME/Projects/svn/myProject/trunk"