簡體   English   中英

在su和awk中轉義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM