#!/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。
答案 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