[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
for i[1] in ...
From: |
Dan Jacobson |
Subject: |
for i[1] in ... |
Date: |
26 Nov 2001 07:14:19 +0800 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 |
$ for i[1] in a b;do echo $i;done
bash: `i[1]': not a valid identifier
how non sporting. any valid reason for not allowing this? I mean I
wasn't trying multidimensional arrays or something.
ok, I guess i can use i1 instead
by the way, I know that exporting arrays is not allowed yet, but
anyway, any regrets here?:
$ m=(a b c);echo ${m[@]}
a b c
$ export m=(a b c);echo ${m[@]}
(a b c) b c
0bin$ export p=(a b c);echo ${p[@]}
(a b c)
BASH_VERSION=$'2.05.0(1)-release'
by the way
$ set -v
$ z=w
z=w
$ m=(1 v)
m=(1 v)
1 v
odd, 2 lines not one.
anyway, here's what I wipped up that was supposed to use m[1], it
works anyway now. I wonder if it is the best way to do what I'm doing.
############################## -*- Mode: sh -*- #############################
## phonecombo -- print all the letter combinations of a phone number
## Copyright : GNU General Public License
## Author : Dan Jacobson -- http://www.geocities.com/jidanni/
## Created On : Jul 2001
## Last Modified By: Dan Jacobson
## Last Modified On: Mon Nov 26 07:09:27 2001
## Update Count : 90
## Status : worked with bash 2.05
###############################################################################
#input example: 25854780
#output: AJTJGPT0 ...[2000 lines]
#note: there are many other programs out there that probably do what
#you want instead, e.g., number2word, which does a spell check to find
#English words in there, etc.
#I just wanted to see if I could print out all those combos...
#Where I live, the phones don't have ABC... etc. anyway.
#
#note that the amount of output is 3 to the power of number of
#digits given, excluding in the total any phone digits '1' and '0'
#.e.g. phone_no 25854780 will give the same number of output lines as
#2585478, i.e. 3**7=2187
: ${1?}
case "$*" in *[^0-9]*)
echo $0: usage: $0 phone_number \(one number only\) >&2 ;exit 44
esac
set $(echo $1|sed 's/./& /g')
for i
do
let ++x; tab=$tab\ #tab: looks nice while debugging
head="$head "'for m'$x' in ${letters[${phone_no['$x']}]}
'$tab'do' #newline: can then use bash line # when debugging
middle=$middle'${m'$x'}'
tail=$tail'; done'
done
letters=("0" "1" "A B C" "D E F" "G H I " "J K L" "M N O"
"P R S" "T U V" "W X Y")
phone_no=(dummy $*)
eval "$head echo $middle$tail"
--
http://www.geocities.com/jidanni/ Tel+886-4-25854780
- for i[1] in ...,
Dan Jacobson <=