>>>Warning, Off-topic<<< Sorry for this arguably off-topic thread, even the original post was technically off-topic but, it _is_ a Debian bug (#10598). The bug was fixed upstream in the June 5 release of bash-2.01. I've received private email that pointed out that the new Debian package is now in Incoming.
Carey Evans wrote: > > Bob Clark <[EMAIL PROTECTED]> writes: > > [snip] > > > Bash incorrectly considers (( to be an > > arithmetic expression introducer when really, it's $((. > > That's strange, since both pdksh and zsh both consider (( to be an > arithmetic expression, and $(( to be an arithmetic expression > _substitution_. Have they both got bugs too? Only ash doesn't know > about (( or $((. You're right about ((, I can't speak for pdksh or zsh sinc I don't have them installed. Let me see if I can say what I can get it right. (( does imply an arithmetic expression but if and only if there'e a matching )). >From the bash manpage: ---------------[ start manpage snippets ]------------------ (list) list is executed in a subshell. Variable assign- ments and builtin commands that affect the shell's environment do not remain in effect after the com- mand completes. The return status is the exit sta- tus of list. ((expression)) The expression is evaluated according to the rules described below under ARITHMETIC EVALUATION. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to let "expression". Arithmetic Expansion Arithmetic expansion allows the evaluation of an arith- metic expression and the substitution of the result. The format for arithmetic expansion is: $((expression)) The expression is treated as if it were within double quotes, but a double quote inside the parentheses is not treated specially. All tokens in the expression undergo parameter expansion, string expansion, command substitu- tion, and quote removal. Arithmetic substitutions may be nested. The evaluation is performed according to the rules listed below under ARITHMETIC EVALUATION. If expression is invalid, bash prints a message indicating failure and no substitution occurs. ---------------[ end manpage snippets ]------------------ So, the bug is that bash-2.0 incorrectly considers ((...);...) an arithmetic expression with a missing closing paren when really it's a proper (list) construct that _should_ be accepted by the shell. ((...)) is a proper arithmetic expression but ((...) ) is a nested list. Similarly, $((...)) is proper form for arithmetic expansion but $((...) ) is a command substitution that happens to contain a list since the closing )) is missing. Bottom line is that bash-2.0 has a bug that makes netscape helper apps fail; upgarding to bash-2.01 fixes that. Here's an example of the bug: $ cd /etc $ /bin/bash-2.0 -c "((pwd);pwd)" /bin/bash-2.0: -c: line 1: missing closing `)' for arithmetic expression /bin/bash-2.0: -c: line 1: syntax error near unexpected token `;p' /bin/bash-2.0: -c: line 1: `((pwd);pwd)' $ $ /bin/bash-2.1 -c "((pwd);pwd)" /etc /etc What do pdksh and zsh do with this? Older bash versions (< 2.0) work but 2.0 is broken. --Bob -- TO UNSUBSCRIBE FROM THIS MAILING LIST: e-mail the word "unsubscribe" to [EMAIL PROTECTED] . Trouble? e-mail to [EMAIL PROTECTED] .