On 11/23/22 5:31 AM, Neko-san via Bug reports for the GNU Bourne Again SHell wrote:
Example:
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=unreal-engine&id=c866141788f5c52cd32ddfaea3e8f5f5ca57b3ae#n135

There's a logic bug at play in Bash where having a value optionally be either a 
string (in this case true/false) or an integer, checked by an if statement, can 
throw an error claiming that an integer is expected even though a || operator 
is used to make integers optional.

This is just bad code.

The line in question is:

if [ "${_use_system_clang}" == true ] || [ "${_use_system_clang}" -eq 1 ]; then

Consider what happens if `_use_system_clang' is set to any non-integer
value other than `true' (e.g. `false', as in this report).

The first test command fails, so the || list executes the second test,
which expands to

[ false -eq 1 ]

Since the `-eq' operator requires integer operands, you get this error:

line 135: [: false: integer expression expected.


--
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    c...@case.edu    http://tiswww.cwru.edu/~chet/


  • If Conditional Log... Neko-san via Bug reports for the GNU Bourne Again SHell
    • Re: If Condit... Chet Ramey

Reply via email to