#!/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