Bash
如何按空格拆分字元串,其中包含引用的值
以下面的 bash 範例為例(我應該提到我的真實輸出來自
vboxmanage list vms
)TEST='"ubuntu server" foo bar' echo $TEST "ubuntu server" foo bar
如何將三個值分開(在循環或單獨的變數中)?我發現的每個解決方案都依賴於空格分隔符,並且會破壞第一個值。
您可以遍歷 VirtualBox 機器的名稱:
vboxmanage list -l vms | sed -n 's/^Name:[[:blank:]]*//p' | while IFS= read -r vm_name; do printf 'There is one VM called "%s"\n' "$vm_name" done
這會列出使用長格式的機器並解析出名稱。然後在 shell 循環中讀取名稱,並為每個名稱列印一條短消息。
您還可以將名稱讀入數組:
readarray -t vm_names < <(vboxmanage list -l vms | sed -n 's/^Name:[[:blank:]]*//p') printf 'There is one VM called "%s"\n' "${vm_names[@]}"
在這裡,名稱列表是紅色的數組
vm_names
。你可以像這樣循環這個數組:for vm_name in "${vm_names[@]}"; do # Use "$vm_name" here done
要同時使用 UUID:
vboxmanage list -l vms | sed -n \ -e '/^Name:[[:blank:]]*/{ s///; h; }' \ -e '/^UUID:[[:blank:]]*/{ s///; G; y/\n/@/; p; }' | while IFS=@ read -r vm_uuid vm_name; do printf 'VM "%s" has UUID "%s"\n' "$vm_name" "$vm_uuid" done