This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Setting Integer Variables in Bash
- From: "Mark J. Reed" <markjreed at gmail dot com>
- To: cygwin at cygwin dot com
- Date: Thu, 29 Jan 2009 18:40:32 -0500
- Subject: Re: Setting Integer Variables in Bash
- References: <21737864.post@talk.nabble.com>
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/