Written by Reid Linnemann on 08/20/07 11:58>>
Written by Christer Hermansson on 08/18/07 18:08>>
Derek Ragona wrote:
At 12:04 PM 8/18/2007, Christer Hermansson wrote:
I also found some basic example at http://www.grymoire.com/Unix/Sh.html#uh-88 :



echo "Type in a number"
read ans
number=`expr "$ans" : "([0-9]*)"`
if [ "$number" != "$ans" ]; then
echo "Not a number"
elif [ "$number" -eq 0 ]; then
echo "Nothing was typed"
echo "$number is a fine number"


The above example doesn't work on my freebsd box. Maybe I need to update my system, sitting with 6.0R which never been updated.

You have a syntax error using expr. Do a man on expr for more details but if you change that line from:
number=`expr "$ans" : "([0-9]*)"`
number=`expr "$ans" : "\([0-9]*\)"`

You will get the desired results.

Also when debugging scripts remember to add:
set -x
to your script on the second line, and see what the script lines are actually doing.


Thanks Derek ! Now both the example and my own code works for me. I changed my code from "^[A-Za-z0-9_-]+$" to "\([A-Za-z0-9_-]*\)" It seems that FreeBSD's expr want some different syntax than the webbased test tool at http://regexlib.com/RETester.aspx

No, your expression is double quoted, which means the shell will expand it before passing it to expr. Parens are expanded by shells, they manipulate the order of operations (i.e. 'echo 1 || echo 2 && echo 3' vs. '(echo 1 || echo 2) && echo 3'). As a result, you must escape the parens or the shell will gobble them up.

Disregard that, I am a moron. :/
freebsd-questions@freebsd.org mailing list
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to