- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我今天在 Powershell 5.1 中对变量名称使用制表符自动完成功能,并注意到其中一个选项是 PSDrive 的名称。驱动器名称是 docs
我想扩展名为 $document_name
.当我输入 $do<tab>
,shell 确实将我输入的内容扩展为 $document_name
但出于某种原因,我输入了 <tab>
第二次,那是扩展文本更改为 $docs:
的时候.
我进一步探索并发现我的每个 PSDrive 都存在这种类型的变量,或者至少选项卡扩展表明它存在。
更正式地说,对于每个 PSDrive PSD,选项卡扩展认为 $PSD:
是一个有效的东西。
我的问题很简单:这些到底是什么?以下是我到目前为止所做的一些观察:
$
, 所以它们看起来像 PS 变量。对于本次讨论的其余部分(以及上面之前的讨论),我将假设它们是变量并这样调用它们。Variable:
中PSDrive 与大多数变量一样。这样,它的行为就像 $env
“变量”,也未在 Variable:
中列出.我有一种感觉,如果我能找到关于 $env
的文档, 那么我也会理解这些对象。readme.txt
包含文本“Hello, world!”在名为 code
的 PSDrive 上, 那么以下所有都是与 Powershell 的可能交互。获取文件的内容。
λ ${code:\readme.txt}
Hello, world!
只是为了证明上面结果的类型是String
:
λ ${code:\readme.txt} | % { $_.GetType().Name }
String
尝试将其用作对 PSDrive 的引用对于许多操作来说效果不佳,例如 cd
:
C:\
λ cd ${code:}
At line:1 char:4
+ cd ${code:}
+ ~~~~~~~~
Variable reference is not valid. The variable name is missing.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvalidBracedVariableReference
我可以继续,但我被难住了。如果我通过 $code:
(或 $env:
,就此而言)到 Get-Member
,我收到一条错误消息 Variable reference is not valid
.
那么像 $env
这样的“变量”到底是什么?和 $<PSDrive>:
(例如 $code:
)?它们是表达式吗?内置表达式?某种物体?谢谢你的帮助。
最佳答案
您看到的是命名空间变量表示法,这是一种访问 PowerShell 驱动器中项目内容的基于变量的方法其底层提供程序实现基于内容的访问(即实现 IContentCmdletProvider
接口(interface))。
术语和文档说明:
$env:
)与范围修饰符(例如 $script:
)无关,但是它们使用相同的基本语法 形式。 [1]一般的语法是:
${<drive>:<path>} # same as: Get-Content <drive>:<path>
${<drive>:<path>} = ... # same as: Set-Content <drive>:<path> -Value ...
封闭的{...}
如果 <drive>
都没有必要名称和 <path>
在句法上可以用作变量名;例如:
$env:HOME # no {...} needed
${env:ProgramFiles(x86)} # {...} needed due to "(" and ")"
实际上,从 Windows PowerShell v5.1 开始,以下内置驱动器提供程序支持命名空间变量表示法:
Env:
)Function:
)Alias:
)C:
, ...)Variable:
)——尽管实际上没有意义,因为默认情况下省略驱动器部分会访问变量(例如, $variable:HOME
与 $HOME
相同)。其中,Env:
drive 是迄今为止最常与命名空间变量符号一起使用的,尽管大多数用户并不知道环境变量引用的基础是什么,例如 $env:HOME
.
有时您会看到它与文件系统驱动器一起使用 - 例如,${c:\foo\file.txt}
- 但您只能使用文字 路径并且您无法控制字符编码这一事实限制了它的实用性。
然而,它允许有趣的用途;例如:
PS> $alias:foreach # Get the definition of alias 'foreach'
ForEach-Object
PS> $function:prompt # Get the body of the 'prompt' function
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml
# Define a function foo that echoes 'hi' and invoke it.
PS> $function:foo = { 'hi' }; foo
hi
注意:
${<drive>:<path>}
和 ${<drive>:<path>} = <value>
相当于Get-Content -Path <drive>:<path>
和 Set-Content -Path <drive>:<path> <value>
,路径被解释为通配符表达式(因为这就是 -Path
所做的,而不是 -LiteralPath
),这可能会导致路径出现问题,看起来像 通配符 - 请参阅 this answer示例和解决方法。[1] 以前,根本没有记录该功能; GitHub docs issue #3343导致了当前的文档,尽管不是按照上述问题提出的方式。
关于powershell - $<drivename> : (such as `$code:` ) in Powershell? 是什么类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034497/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!