【发布时间】:2018-05-06 22:25:10
【问题描述】:
我需要一些帮助。我有这个命令
df -h | awk '/md2/' | awk '{print $5}'
我希望将“/md2/”设置为变量。 search="/md2/" 使用
df -h | awk '$search' | awk '{print $5}'
没有回应,我该怎么做。
【问题讨论】:
我需要一些帮助。我有这个命令
df -h | awk '/md2/' | awk '{print $5}'
我希望将“/md2/”设置为变量。 search="/md2/" 使用
df -h | awk '$search' | awk '{print $5}'
没有回应,我该怎么做。
【问题讨论】:
用途:
search='md2'
df -h | awk -v x="$search" '$0~x{print $5}'
它是如何工作的:
-v x="$search"
这告诉 awk 定义一个 awk 变量 x 以具有 $search 的值。
$0~x{print $5}
$0 ~ x 告诉 awk 选择与变量 x 中的正则表达式匹配的行。对于选定的行,将打印字段 5。
df -h | awk '$search' | awk '{print $5}'
上面的方法不起作用,因为$search 在单引号内,这会阻止 bash 替换 $search 的值。您可以通过以下方式查看:
$ search='/md2/'; echo awk '$search'
awk $search
以下将起作用:
search='/md2/'
df -h | awk "$search" | awk '{print $5}'
这里,$search 在双引号内,bash 将扩展双引号内的变量。
这还有两个问题:
awk "$search" 具有潜在危险。无论$search 的内容是什么,awk 都会执行。除非您非常确定内容是什么,否则这可能会导致文件损坏或删除等。
awk 的两次使用是不必要的,而且速度很慢。选择一行和打印一个字段这两种操作都可以在一次 awk 调用中完成。
【讨论】: