我正在尝试在脚本中获取用户主目录下的一个目录。这是我的尝试,但是 ~ 被解释为字面意思,而不是扩展到主目录。有没有办法使其扩展?如果没有,我还有其他获取主目录的方法吗?
$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
。)
如果您将路径作为参数传递给命令,则根据路径包含的字符,您可以尝试不使用"..."
进行封闭,例如:
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 ~
会导致错误此提供程序的主目录未设置。要设置主目录,请调用“(get-psprovider 'Environment').Home = 'path'”
是驱动程序提供程序解释~
,所以~
也适用于'...'
和 "..."
Set-Location ~/Desktop
Set-Location "~/Desktop"
Set-Location '~/Desktop'
~
的展开,但只有在未被引用时才进行。尝试
$mySourceDir = "$env:HOME/Projects/svn/myProject/trunk"
HOME
在类Unix平台(macOS和Linux)上是环境变量,并且问题提到了macOS(OSX)。话虽如此,使用PowerShell的自动$HOME
变量可以实现跨平台解决方案。 - mklement0
$x = "~/test/"
然后在 Linux 上使用变量引用,我的 PS 6 可以正常工作。 - TessellatingHecklerOS X
有什么关系? - l'L'l