Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 01 Mar 2020 23:06:26 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 235589] sh(1): LINENO is unset in shell arithmetic
Message-ID:  <bug-235589-227-feZRaCAMFC@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-235589-227@https.bugs.freebsd.org/bugzilla/>
References:  <bug-235589-227@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D235589

--- Comment #6 from Jilles Tjoelker <jilles@FreeBSD.org> ---
This is quite nice, but please run the tests (basically, cd /usr/tests/bin/=
sh
&& kyua test) and add new tests for $((LINENO)). Existing tests should not =
be
modified unless they were broken or too specific.

I think NCASE and NFOR nodes should also contain a line number.

An earlier version of the patch did a simple 32-bit integer write during
execution, leaving the snprintf(..., "%d", ...) to when LINENO was expanded=
. I
liked that better. There could be a VLINENO flag indicating LINENO's struct=
 var
(and that it is still special, see below).

Making LINENO readonly matches zsh but I found some obscure scripts searchi=
ng
for "LINENO=3D" on codesearch.debian.net (such as
https://sources.debian.org/src/opentmpfiles/0.2+2019.05.21.git.44a55796ba-2=
/tmpfiles.sh/?hl=3D443#L443
) that assign values to LINENO and will then break. Currently, this is acce=
pted
but has almost no effect, so completely ignoring assignments is probably qu=
ite
safe. This also seems to happen in bash.

In ksh variants, assigning to LINENO changes an offset for future LINENO
expansions (for example, if line 10 contains LINENO=3D1010, future LINENO
references will result in a line number 1000 more than normal; a bit like #=
line
in C). I suggest not implementing this because it will not work well with t=
he
current design for line numbers within functions.

In both bash and ksh, unsetting LINENO makes it a normal variable, and the =
only
way to expand line numbers again is to restart the shell. Implementing this=
 may
or may not be worth it.

--=20
You are receiving this mail because:
You are on the CC list for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-235589-227-feZRaCAMFC>