在su和awk中逃脱

时间:2014-11-08 10:55:38

标签: bash shell

#!/bin/bash
VM=`su joe -c "VBoxManage list vms | awk '{split($0,a,"\""); print a[2]; exit}'"`
echo $VM

我喜欢从joe的角度来看第一个VM名称。如何正确逃脱?

VBoxmanage list vms输出是:

"VM 1" {serial num}
"VM 2" {serial num}

Echo应该输出VM 1。

3 个答案:

答案 0 :(得分:0)

这有几种方法。这是一个:

VM=$(su joe -c "VBoxManage list vms | awk -F'\"' '{print \$2; exit}'")

不要使用拆分,只需更改字段分隔符即可。根据输出的输出行数,也可能不需要退出调用。如果只有一行,awk会在处理它之后退出。我还将整个命令的反引号更改为首选的$()语法。

答案 1 :(得分:0)

VM=$(su joe -c 'VBoxManage list vms | cut -d \" -f2 | sed 1q')

答案 2 :(得分:0)

您需要转义"$两者:

VM=$(su joe -c "VBoxManage list vms | awk -F '\"' '{print \$2; exit}'")
echo "$VM"
VM 1