From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6646 invoked by alias); 24 Apr 2013 20:06:05 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 17771 Received: (qmail 10629 invoked from network); 24 Apr 2013 20:06:02 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 Received-SPF: none (ns1.primenet.com.au: domain at nkuitse.com does not designate permitted sender hosts) Date: Wed, 24 Apr 2013 14:49:05 -0400 From: Paul Hoffman To: zsh-users@zsh.org Subject: Re: How should I construct this? Message-ID: <20130424184905.GA77653@phisen> Mail-Followup-To: zsh-users@zsh.org References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) On Wed, Apr 24, 2013 at 02:16:26PM -0400, TJ Luoma 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 > > ALL_WIFI_NETWORKS=( > 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. Use an associative array: typeset -A wifi wifi=( Home 89382ashfa Work 0823u2j98dyumn 'Coffee House' '' "Jenny's Wiki" 8675309 ) for name in ${(k)wifi}; do print "$name -> ${wifi[$name]}"; done Paul. -- Paul Hoffman