我发现了几个关于如何将变量从bash
into传递的问题awk
,最值得注意的是-v
命令,但我似乎无法让它们做我想做的事。
在脚本之外,我正在运行的命令是
awk '$2 ~ /^\/var$/ { print $1 }' /etc/fstab
它只搜索/etc/fstab
分区/var
,并且应该打印出物理安装点,或者如果没有,则什么都没有。
现在在脚本中,我有一个包含许多分区的数组,我想做的是遍历该数组以搜索 fstab 中的每个物理挂载点。问题在于数组中的元素有一个/
。
所以我想做的(在非常不正确的awk中)是:
PARTITIONS=(/usr /home /var tmp);
for ((n=0; n<${#PARTITION[@]}; n++)); do
cat /etc/fstab | awk '$2 ~ /^\${PARTITIONS[$n]}$/ { print $1 }';
done
但我知道那是不正确的。我现在最接近的是:
PARTITIONS=(/usr /home /var tmp);
for ((n=0; n<${#PARTITION[@]}; n++)); do
cat /etc/fstab | awk -v partition="${PARTITIONS[$n]}" '$2 ~ /^\/var$/ { print $1," ",partition }';
done
哪个至少将分区变量放入 awk,但根本无法帮助我匹配它。
所以基本上,我需要输入阵列,然后取出物理分区。最终结果将被分配给另一个数组,但是一旦我得到输出,我就可以从那里开始。
我也知道 awk 可以在一开始就消除对 cat 的需求,但是我对 awk 的了解还不够。:)
谢谢你的帮助。
编辑
cat /etc/fstab | awk -v partition="${PARTITIONS[$n]}" '$2 ~ partition { print $1 }'
近似于我需要的足够有用的东西。我显然过于关注包含正则表达式。如果其他人可以清理它,将不胜感激:)