我正在尝试使用case语句在initramfs中解析/ proc / cmdline。
CMDLINE=`cat /proc/cmdline`
for param in $CMDLINE ; do
case "$param" in
root=*|init=*)
eval "$param"
;;
rescue)
escue="y"
;;
drive*)
echo -n $param
;;
esac
done
现在问题在于我有驱动器*,我想从cmdline中获取多个驱动器实例并将它们全部解析为数组。
所以/ proc / cmdline可能看起来像这样。
/dev/mapper/Betsy-root vga=792 quiet=y opt2=bar opt1=bar op3=bar drive1="abcde:key.gpg" drive2="qrstuv:key2.gpg" drive3="foobar:false"
问题出在我开车时的案例陈述中*)$ param现在看起来像这样。
drive1="abcde:key.gpg"drive2="qrstuv:key2.gpg"drive3="foobar:false"
好奇是实现我想要的最好方法。这将是动态创建驱动器阵列。例如
drive[0]
drive[1]
drive[2]
我尝试做的只是寻找[a-zA-Z]并插入新的一行。这样他们就会分开,我可以将它们扔进一个阵列。虽然我从来没有运气到按照我的意愿工作。所以说的一切......
不知道/ proc / cmdline中将有多少个实例。如何将每个驱动器[0-9]推入阵列。或许这只是一个案例陈述的坏地方?任何建议将不胜感激。
答案 0 :(得分:2)
drive*)
drive_array+=($param)
BAM!你有你的阵列。 为了与旧的bash版本兼容:
drive*)
drive_array=("${drive_array[@]}" $param)
如果原始字符串在drive =之间有空格,那么你的罚款。如果在某些情况下他们没有空格,你必须做一些额外的工作:
drive*)
drive_array+=(${param//drive/ drive})
这是一个全局替换,在每个驱动器前面添加一个空格,这样它就被分成了数组中的不同元素。如果需要,执行相同的转换以使其与旧版本兼容。