[英]Escape within su and awk
#!/bin/bash
VM=`su joe -c "VBoxManage list vms | awk '{split($0,a,"\""); print a[2]; exit}'"`
echo $VM
我喜歡從joe的角度獲得第一個VM名稱。 如何正確逃脫?
VBoxmanage列表vms輸出為:
"VM 1" {serial num}
"VM 2" {serial num}
等等
回聲應該輸出VM 1。
有幾種解決方法。 這是一個:
VM=$(su joe -c "VBoxManage list vms | awk -F'\"' '{print \$2; exit}'")
無需更改拆分,只需更改字段分隔符即可。 根據有多少行輸出,也可能不需要調用exit。 如果只有一行,awk將在對其進行處理后退出。 我還將整個命令的反引號更改為首選的$()
語法。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.