Bash 在su和awk中逃跑

Bash 在su和awk中逃跑,bash,shell,Bash,Shell,我喜欢从joe的角度获得第一个VM名称。你如何正确地逃脱 VBoxmanage列表vms输出为: #!/bin/bash VM=`su joe -c "VBoxManage list vms | awk '{split($0,a,"\""); print a[2]; exit}'"` echo $VM 等 Echo应该输出vm1。有几种方法可以解决这个问题。这里有一个: "VM 1" {serial num} "VM 2" {serial num} 不使用拆分,只需更改字段分隔符即可。根据有

我喜欢从joe的角度获得第一个VM名称。你如何正确地逃脱

VBoxmanage列表vms输出为:

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


Echo应该输出vm1。

有几种方法可以解决这个问题。这里有一个:

"VM 1" {serial num}
"VM 2" {serial num}
不使用拆分,只需更改字段分隔符即可。根据有多少行输出,可能也不需要调用exit。如果只有一行,awk将在处理它之后退出。我还将整个命令的反勾号改为首选的$syntax。

您需要转义和$2:


VBoxManage list vms命令的输出是什么?此命令的预期输出是什么?输出是:VM 1{b3267302-6b59-40a5-acb6-27e7f9676b91}\nVM 2{…我想获得第一个VM名称VM 1。您应该编辑问题以包含该文本。好主意,但是:bash:-c:line 0:在查找匹配的``时出现意外的EOF bash:-c:line 1:语法错误:意外的文件结尾正如我上面所说的,在问题中看到命令的输出会很有帮助,但是是的,您是对的,这需要邢。@joe jeff我已经编辑了我的答案,我想现在可以了。
VM=$(su joe -c "VBoxManage list vms | awk -F'\"' '{print \$2; exit}'")
VM=$(su joe -c 'VBoxManage list vms | cut -d \" -f2 | sed 1q')
VM=$(su joe -c "VBoxManage list vms | awk -F '\"' '{print \$2; exit}'")
echo "$VM"
VM 1