#!/bin/bash
VM=`su joe -c "VBoxManage list vms | awk '{split($0,a,"\""); print a[2]; exit}'"`
echo $VM
我喜欢从joe的角度来获取第一个VM名称。如何正确逃脱?在su和awk中逃脱
VBoxmanage列表虚拟机的输出是:
"VM 1" {serial num}
"VM 2" {serial num}
等
回声应该输出中VM 1.
#!/bin/bash
VM=`su joe -c "VBoxManage list vms | awk '{split($0,a,"\""); print a[2]; exit}'"`
echo $VM
我喜欢从joe的角度来获取第一个VM名称。如何正确逃脱?在su和awk中逃脱
VBoxmanage列表虚拟机的输出是:
"VM 1" {serial num}
"VM 2" {serial num}
等
回声应该输出中VM 1.
VM=$(su joe -c 'VBoxManage list vms | cut -d \" -f2 | sed 1q')
有几种方式圆这一点。这里有一个:
VM=$(su joe -c "VBoxManage list vms | awk -F'\"' '{print \$2; exit}'")
而不是使用拆分,只是改变字段分隔符。根据输出的行数,也可能不需要退出调用。如果只有一行,awk将在处理完毕后退出。我还将整个命令的反引号改为首选的$()
语法。
好主意,但是:bash:-c:第0行:寻找匹配时的意外EOF bash:-c:第1行:语法错误:文件意外结束 – 2014-11-08 11:10:38
正如我上面所说,看到你的命令输出的问题,但是,你是对的,这需要修复。 – 2014-11-08 11:14:38
已更新输出格式。 – 2014-11-08 11:19:27
你需要逃避"
和$
两个:
VM=$(su joe -c "VBoxManage list vms | awk -F '\"' '{print \$2; exit}'")
echo "$VM"
VM 1
什么是'VBoxManage列表输出vms'命令是什么,从这个命令的预期输出? – anubhava 2014-11-08 11:00:36
输出结果为:“VM 1”{b3267302-6b59-40a5-acb6-27e7f9676b91} \ n“VM 2”{...我喜欢获取第一个VM名称(VM 1)。 – 2014-11-08 11:06:02
您应该编辑您的问题以包含该文本。 – 2014-11-08 11:08:52