我是新来的,我会尽力解释我的问题:)
我想编写一个备份脚本来保存KVM使用的所有lv
。
操作系统:Ubuntu Server x64 12.04
Bash 4.2.24
XML文件内容:
<source file='/dev/vg1/lv1'/>
<source file='/dev/vg1/lv2'/>
我的grep / cut命令
grep "<source file='.*.'/>" /backup/$SRCNAME/$DATUM/$SRCNAME.xml | cut -f2 -d"'" | cut -f4 -d"/"
此输出
lv1
lv2
如何让它对每个输出执行某些操作 - 以最佳方式将输出存储在数组中?
我一直在寻找2天的答案:(我尝试了一些循环和管道,但没有任何效果,因为我的grep命令太具体了:/
答案 0 :(得分:2)
将其保存到数组中:
array=( $(grep "<source file='.*.'/>" /backup/$SRCNAME/$DATUM/$SRCNAME.xml | cut -f2 -d"'" | cut -f4 -d"/")
您也可以将其传输到循环中:
grep "<source file='.*.'/>" /backup/$SRCNAME/$DATUM/$SRCNAME.xml | cut -f2 -d"'" | cut -f4 -d"/" | while read lv; do
echo "$lv"
done
但请注意,由于管道,循环可能在子shell中运行,因此对变量的更改不会传播回父shell。
希望这有助于=)