引用变量和变量的值(Referencing Variables and Variable Value)

 

如下翻译来自微软 TechNet 脚本中心 : http://www.microsoft.com/technet/scriptcenter/resources/pstips/jun07/pstip0615.mspx
译者: Edengundam(马涛)
 
Referencing Variables and Variable Values
当你编写脚本时 , 特别是系统管理脚本 , 你基本上不可能提早的将你是用的值硬编码进去 ; 取而代之的是 , 你通常将取得的信息存储在一个或多个变量中 , 然后显示这些变量的值 . 例如 , 你可能有一个简单的 VBScript 脚本 , 向下面示例代码一样从活动目录中获取数据 :
strFirstName = objUser.givenName
strLastName = objUser.sn
strTitle = objUser.title
strDepartment = objUser.department
一旦你获得了这些数据 , 你倾向于回显一个更加漂亮的句子 , 例如 :
"Ken Myer is an Accountant in Financial Services."
这太简单了 , 是不是 ? , 也许吧 . 然而 , VBScript 中组合文本和变量值至少是需要一些技巧的 . 例如 , 要显示上面的信息 , 你需要照着这样来编写代码 :
Wscript.Echo strFirstName & " " & strLastName & " is an " & strTitle & " in " & strDepartment & "."
这种代码不是不可能的 , 但是却非常的麻烦 , 而且很容易就会犯向丢掉一个空格的错误 . 结果就是 , 那些微不足道的错误就会导致看起来非常不专业的输出 , 输出结果类似于 :
"Ken Myer is anAccountant inFinancial Services."
但是你究竟打算做什么啊 ? 毕竟它不能直接的将变量嵌入到字符串中 . 不管你是否真的喜欢 , 所有的 & 和双引号都是无法更改的不幸事实而已 .
, 除非你正在使用 Windows PowerShell, 它可以做到 .
Windows PowerShell 中显示变量的值
Windows PowerShell 你能够在字符串中嵌入变量 , 而后 PowerShell 将会显示该变量的值 . 什么意思啊 ? , 来思考下这个简单的 PowerShell 脚本 , 对四个不同的变量赋值 , 然后使用 Write-Host cmdlet 会先包含着所有变量的字符串 :
$FirstName = "Ken"
$LastName = "Myer"
$Title = "Accountant"
$Department = "Financial Services"
 
Write-Host "$FirstName $LastName is an $Title in $Department."
现在 , 你设想的屏幕实际显示结果究竟是什么样子呢 ? 不管你是否相信 , 这个 就是屏幕输出的结果 :
Ken Myer is an Accountant in Financial Services.
没有 &, 没有双引号 , 不需要担心添加额外的空格 : 只需要将变量放置在字符串中 , PowerShell 将会回显变量的值 .
这是多么的简单与清晰 , 真是革命性的进步 . ( 译注 : , 这个老外好幽默 , 这个技术在古老的 Unix sh 中就支持了 ...)
现在 , 必须要承认的是 , 总会有某些时候你不希望变量的值被显示在屏幕上 . 例如 , 假设你希望显示在屏幕的是这个 :
$FirstName $LastName is an $Title in $Department.
很奇怪吧 , 但是你想输出到屏幕的信息与我们可是什么关系都没有的 .
如果 PowerShell 自动的将变量替换为值 , 你该如何去完成它呢 ? 其实非常简单 ; 你只需要将字符串用引号括起来 :
Write-Host '$FirstName $LastName is an $Title in $Department.'
单引号将导致字面值直接被输出 ; 双引号将会导致变量的实际值被输出 .
我们再来一个例子 . 正如你所知道的 , PowerShell 包含了一些 “automatic” 变量 , 用来返回一些关于 PowerShell PowerShell 环境的信息 ; 例如 , 变量 $pshome 将会返回 Windows PowerShell 安装的目录名称 . 假设我们有下面一行代码 ( 这是一行怪异的代码 , 但是请您饶了我们吧 )( 译注 : 作者这里只是为了展示例子 , 而构造了不太合适的例子 , 因此玩笑似的希望读者见谅 ):
Write-Host "$pshome"
这样将会返回变量 $pshome 的值 ; 也就是 PowerShell 安装到的目录名称 :
C:/WINDOWS/system32/WindowsPowerShell/v1.0
现在假设我们有这样一行代码 :
Write-Host '$pshome'
我们必须感谢单引号 , 它使得输出的结果为字面值 (literal):
$pshome
其实并不用我们说 , 这些太棒了 . 但是如果我们想输出如下的信息呢 :
The value of the $pshome variable is C:/WINDOWS/system32/WindowsPowerShell/v1.0.
我们究竟该如何完成 ? 我们该如何既输出字面值也输出变量的实际值 , 还可以在一句中完成 ?
这个就是啦 :
Write-Host "The value of the `$pshome variable is $pshome."
看到这里我们是如何做的了吧 ? 我们将整个字符串用双引号括起来 ; 因此 , 你一定期待着 PowerShell 将会输出实例 $pshome . 但是请注意那个有点滑稽的字符 ( 就是 重音符号 ”) 我们将它放置在第一个 $pshome 实例的前面 :
`$pshome
这就是秘密所在了哦 : 在变量前使用一个重音符号 , PowerShell 将会显示变量的名称 ($pshome) 而不是该变量的值 . 就像我们这里所做的一样 , 即使将整个字符串放在双引号中这个规则也是成立的 .
换句话说 , PowerShell , 组合变量和其他文本是非常容易的 : 只需要将变量嵌入到字符串中 , 默认情况下 PowerShell 就会显示该变量的值 . 不可否认的 , 我们将会错过 &, 双引号 , 和类似这样的怪异结果 :
Wscript.Echo strLastName & ", " & strFirstName & " " & strInitials & "."
但是 , 我们已经设法绕过它们了 .
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值