Deutsch English Français Italiano |
<v37ktf$17c89$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Janis Papanagnou <janis_papanagnou+ng@hotmail.com> Newsgroups: comp.unix.shell Subject: Re: create variables in a loop? Date: Wed, 29 May 2024 18:25:11 +0200 Organization: A noiseless patient Spider Lines: 67 Message-ID: <v37ktf$17c89$1@dont-email.me> References: <lbog03FfbrqU1@mid.individual.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Injection-Date: Wed, 29 May 2024 18:25:19 +0200 (CEST) Injection-Info: dont-email.me; posting-host="aeae80ca8ca6b6db907300a8339690ad"; logging-data="1290505"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18PWcbUrDeQHtOcO1h0yfkS" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 Cancel-Lock: sha1:9OYjNJgey/ZWG/OujBn7JCOzhEE= X-Enigmail-Draft-Status: N1110 In-Reply-To: <lbog03FfbrqU1@mid.individual.net> Bytes: 2794 On 29.05.2024 12:57, Dr Eberhard W Lisse wrote: > Hi, > > I would like to do something like > > for i in USD GBP > do > $i=somevalue > done > > does not work, of course. > > Any idea on how to create (and fill variables through a loop)? You've already got the technical answer to your (literal) question. Basically something like for currency in USD GBP EUR do eval "${currency}='some value $((++n))'" done printf "%s\n" "$USD" "$GBP" "$EUR" But I suggest to reconsider your software design approach! Mind that variables are for programmers, and that if you create variable names dynamically you either have to hard code the names in several places, or use 'eval' in several places; where ever you want to access them. (Which requires additional tests, to be sure.) Other approaches are (for example) defining data structures for the allowed variable name values (and attributes) currencies=( USD GBP EUR ) factor=( 1.2 1.5 1.0 ) value=4.3 for (( i = 0; i < ${#currencies[@]} ; i++ )) do printf "%s: %g\n" "${currencies[i]}" $(( ${value} * ${factor[i]} )) done or use control constructs (to differentiate interrogated dynamic name values) like for f in data_file_* do curr=${f##data_file_} case ${curr} in (USD) val=1.2 ;; (GBP) val=1.5 ;; (EUR) val=1.0 ;; (*) exit 1 ;; esac done to be able to tell apart allowed values from undefined and errors. The question is; do I really want an *individual* _variable name_ created? (Or is the technical [variable] name actually just data?) Janis > > greetings, el >