On Sunday 04 May 2008 13:12, David C. Rankin wrote:
Listmates,
I ran across this bash test for integers and it works brilliantly. It was quite a contrast to the myriad of case $x in ... *[0-9+-]* ... approaches I ran across. I don't know exactly how it works, but only that it works -- apparently great.
If anyone could shed some light on how it works it would be appreciated. I presume it works based upon the differences in the way string and numerical data is held in memory or in a difference in what [ $AM_I_INT ] actually returns and the way the test is carried out. But that is no more than a guess. If anyone has a need, this is a great solution: AM_I_INT="$1"
if [ $AM_I_INT -eq $AM_I_INT 2> /dev/null ]; then echo -e "\n\t$AM_I_INT is an integer\n" else echo -e "\n\t$AM_I_INT is not an integer\n" fi
A key distinction in the "test" builtin (most commonly accessed using the square bracket notation) is between string equality testing with "=" and numeric equality testing with "-eq". In order for a numerical equality test to be meaningful, both arguments must be interpretable as numbers. So if you try to test "foo" for numeric equality with "foo", you get an error in the attempt to convert "foo" to a number. When that fails, test deems the comparison to have failed. Sending the standard error to dev null with "2> /dev/null" keeps the user from seeing the failure to convert "foo" to an integer. If you try it without standard error redirection, you'll see what happens: % [ "foo" -eq "foo" ] && echo EQ || echo Not EQ bash: [: foo: integer expression expected Not EQ
Courtesy of: http://minddownload.blogspot.com/2007/06/test-for-integer-in-bash.html
-- David C. Rankin
Randall Schulz -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org For additional commands, e-mail: opensuse+help@opensuse.org