Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: How should I construct this?

On Wed, Apr 24, 2013 at 8:16 PM, TJ Luoma <luomat@xxxxxxxxx> wrote:
> I am trying to write a shell script which will help my computer
> automatically join Wi-Fi networks.
> Each network needs to have an SSID (which may have spaces in it) and a
> password (which may have spaces, punctuation, etc in it).
> I'm trying to figure out the best way to create this.
> I thought about trying to make an array or something like this where the
> first 'column' would be the SSID and the 2nd column would be the passwords
>                                 Home
> 89382ashfa
>                                 Work
> 0823u2j98dyumn
>                                 "Coffee House"          ""
>                                 "Jenny's Wifi"          8675309
> )
> but then I need to be able to loop through $ALL_WIFI_NETWORKS using only
> first column… something like this
> for SSID in {{{The First Arg in Each Line of $ALL_WIFI_NETWORKS}}}
> do
>                 echo "foo"
> done
> where the part in {{{ and }}} indicates the part where I really don't know
> how to do what I want to do.
> It seems like there's got to be an easier / better way of doing this, but I
> can't figure out what it is, other than keeping two lists/arrays, one of the
> SSIDs, and one with the passwords, but that seems kludgey because I have to
> ask the user (whoever uses this script besides me) to put the SSIDs in
> twice.
> TjL

What you want to use in a case like this are hashtables.
Basically this is a special array type, defined like this:

ALL_WIFI_NETWORKS=(name 'password' name2 'password2)

You can then loop: for FOO in ${(k)ALL_WIFI_NETWORKS}; BAR

Hope this helps,


Messages sorted by: Reverse Date, Date, Thread, Author