访问 ksh 中 nawk 内的外壳变量
我正在尝试访问管道 nawk 内的 shell 变量。 我以前从未这样做过,想知道是否可能。
以下是命令 sbdadm list-lu
内容:
找到 2 个逻辑单元
<小时>GUID 数据大小源
600144f029bf0a0000004e0484740052 107380964864 /dev/rdsk/c9d0s1 600144f029bf0a0000004e0484740053 53694562304 /dev/rdsk/c9d0s3
这是我的脚本示例:
DISK=/dev/rdsk/c9d0s3
sbdadm list-lu |nawk '/$DISK/ {print}'
注意:我知道“ /$DISK/
”语法将不起作用,因为 $ 是正则表达式符号。 如果这样的代码可能的话,我需要正确的语法。
另外,awk 会生成另一个 shell 吗? 如果是这样,我是否可以将此变量 $DISK
导出到该 shell。
I am trying to access a shell variable inside a piped nawk.
I have never done this before and was wondering if its possible.
Here is the command sbdadm list-lu
contents:
Found 2 LU(s)
GUID DATA SIZE SOURCE
600144f029bf0a0000004e0484740052
107380964864 /dev/rdsk/c9d0s1
600144f029bf0a0000004e0484740053
53694562304 /dev/rdsk/c9d0s3
Here is my sample of my script :
DISK=/dev/rdsk/c9d0s3
sbdadm list-lu |nawk '/$DISK/ {print}'
NOTE: I know the " /$DISK/
" syntax will not work since $ is part of a regex symbol.
I need the right syntax if such a code is ever possible.
In addition,does awk spawn another shell?
If so, is it possible that I can export this variable $DISK
to that shell.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题不在于
$
是 RE 语法的一部分;而是在于$
是 RE 语法的一部分。/
是 RE 分隔符。如果您只是在寻找c9d0s3
,那么使用正确的引用就可以解决问题:说明:如果您使用
""
而不是''
,那么 shell 变量将在将程序交给awk
之前展开,因此awk
将被视为其程序。您仍然可以搜索其中包含
/
的模式,但这需要一些 shell 引用魔法:并且
awk
不会生成子 shell。为什么会这样?如果您可以通过环境来传递变量,为什么还需要一个变量呢?The problem is not that
$
is part of RE syntax; it's that/
is the RE delimiter. If you were just looking forc9d0s3
, then using the proper quoting would do the trick:Explanation: if you use
""
instead of''
, then the shell variable would be expanded before handing the program toawk
, soawk
would seeas its program. You can still search for a pattern with
/
in it, but it takes some shell quoting magic:And no,
awk
does not spawn a subshell. Why would it? And why would you need one to pass a variable if you can just do it through the environment?结果:
使用
system
调用(导出 DISK 后):echo | awk '{system("echo $DISK")}'
结果:
/dev/rdsk/c9d0s3
results:
With
system
call (after DISK was exported):echo | awk '{system("echo $DISK")}'
results:
/dev/rdsk/c9d0s3
除了 jwr 的答案,您还可以使用 shell 变量的值显式设置 awk 变量:
In addition to j.w.r's answer, you can explicitly set an awk variable with the value of the shell variable: