On Mon, Feb 21, 2011 at 7:59 PM, Matthew Gyurgyik <pyther@pyther.net> wrote:
I know we (Dieter and I) chatted about using $supported_bootloaders for ask_option but I couldn't figure out any useful way to provide additional information next to the bootloader without creating an array like this. supported_bootloaders=(syslinux "some info" grub "some more info") which would seem to defeat the purpose of supported_bootloader.
i'm not sure 100% what all you have going on here, but i use a lot of heredocs in these bash "data table" situations: ----------------------------------------------------------------------- #!/bin/bash key=none val=none echo -e "START\n[key] $key" "[val] $val\n" process_opts () { while IFS="=" read k v; do # can't use key/val directly because # last loop (EOF) will reset them! key="$k" val="$v" echo "[key] $key" "[val] $val" done } process_opts <<EOF grub=A nice long explantaion about grub :-) syslinux=And that's why we are teh awesome! insert_here=I'm just along for the ride EOF echo -e "\nEND\n[key] $key" "[val] $val" ----------------------------------------------------------------------- you feed the heredoc into a function, which then processes the data as stdin. as IFS controls word splitting, and rather then setting/restoring it, we augment it for the specific calls we need. in this case i chose an `=`, but it could be anything. but default it uses spaces/tabs so you'll prob want to change it. another approach with the same effect, but possibly more useful in your case as the table is persistent via variable: ----------------------------------------------------------------------- #!/bin/bash key=none val=none opts="grub=A nice long explantaion about grub :-) syslinux=And that's why we are teh awesome! insert_here=I'm just along for the ride" echo -e "START\n[key] $key" "[val] $val\n" while IFS="=" read k v; do key="$k" val="$v" echo "[key] $key" "[val] $val" done <<<"$opts" echo -e "\nEND\n[key] $key" "[val] $val" ----------------------------------------------------------------------- the only downside to the above is that `" ... "` means you have to worry about more escaping. also note the quotes -- `<<<"$opts"` -- they are critical! else the newlines become spaces. personally i like heredocs because they are made for exactly this use, and look clean. some other info ... store heredoc in variable (best of both examples, at cost of `cat` call and subshell): opts=$(cat <<EOF ... EOF) EVERYTHING in a heredoc is literal (variables/slashes/etc) [note the preceding `\`; quotes work too] process_opts <<\EOF ... EOF suppress leading tabs (so you can indent for readability) [note the preceding `-`] process_opts <<-EOF ... EOF EOF is just what i use; it can be any string. http://tldp.org/LDP/abs/html/here-docs.html C Anthony