This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Setting Integer Variables in Bash


On Thu, Jan 29, 2009 at 5:54 PM, whitewall wrote:
>
> The text below is from a text file.  If I type the commands line-by-line in
> the bash then the commands work as expected.  If I save the commands in a
> text file and call the script I get the error message:
> ': not a valid identifier2: declare: 'Red
> ': not a valid identifier3: declare: 'Green

If you run the script's stderr through od or similar, you will see
that what bash is really saying is

 /path/to/your/file: line 2: declare: 'Red\r': not a valid identifier
 /path/to/your/file: line 3: declare: 'Green\r': not a valid identifier

where the '\r's are carriage returns which cause the cursor to go back
and overwrite the first part of  the message.
Run d2u on your script.

> #! /cygdrive/c/cygwin/bin/bash
> declare -i Red
> declare -i Green
> Red=10
> Green=$Red+1

Since you've declared both Green and Red as integer, you should just
do Green=Red+1, without the dollar sign. Doing Green=$Red+1 first
takes Red's value, which is stored as an integer, expands it back into
its decimal string representation, and then reparses it to yield its
integer value.  I know that in a real script, any efficiency gains
will be swamped by I/O, but there's no sense making the shell do extra
work. :)

-- 
Mark J. Reed <markjreed@gmail.com>

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]