Bug 104432 - sh(1): remove undocumented "exp" and "let" builtins
Summary: sh(1): remove undocumented "exp" and "let" builtins
Status: Closed FIXED
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: 6.2-PRERELEASE
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-10-15 11:00 UTC by martinko
Modified: 2019-01-19 19:27 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description martinko 2006-10-15 11:00:34 UTC
There is no mention of `let` shell built-in neither in sh(1) nor builtin(1) man pages.

How-To-Repeat: Check above mentioned manual pages.
Comment 1 Tom Rhodes freebsd_committer freebsd_triage 2006-11-15 11:29:26 UTC
Responsible Changed
From-To: freebsd-doc->trhodes

Over to me, I'm investigating.
Comment 2 martinko 2007-08-25 00:33:40 UTC
FreeBSD-gnats-submit@FreeBSD.org wrote:
> Thank you very much for your problem report.
> It has the internal identification `docs/104432'.
> The individual assigned to look at your
> report is: freebsd-doc. 
>
> You can access the state of your problem report at any time
> via this link:
>
> http://www.freebsd.org/cgi/query-pr.cgi?pr=104432
>
>   
>> Category:       docs
>> Responsible:    freebsd-doc
>> Synopsis:       No mention of "let" shell builtin in manual pages.
>> Arrival-Date:   Sun Oct 15 10:00:34 GMT 2006
>>     
>
>
>   

To whom it may concern,

Please note that my email address which I used when submitting 
docs/104432 has expired.
Please update my email address if possible so that I can receive further 
follow ups on this PR.

Thank you,

Martin
Comment 3 Jilles Tjoelker freebsd_committer freebsd_triage 2010-04-10 21:28:43 UTC
I'd like to keep the "let" builtin undocumented because it may be
removed in the future. It is non-standard and not very useful, and
behaves differently from ksh's let builtin (which is itself deprecated
in favour of the ((EXPRESSION)) syntax).

If let's return value is not used, something like
  VAR=$(let EXPRESSION)
is equivalent to
  VAR=$((EXPRESSION))
except that errors in the expression are fatal and quoting special
characters is not needed in the latter case.

If let's return value is used, something like
  if let EXPRESSION >/dev/null
can be replaced by
  if [ $((EXPRESSION)) -ne 0 ]
with similar differences.

-- 
Jilles Tjoelker
Comment 4 Jilles Tjoelker freebsd_committer freebsd_triage 2010-04-25 22:24:52 UTC
Responsible Changed
From-To: trhodes->jilles

I'd like to remove "exp" and "let" at some point, but probably not any time soon.
Comment 5 Jilles Tjoelker freebsd_committer freebsd_triage 2011-05-04 22:32:49 UTC
Hi,

> [undocumented sh(1) exp and let builtins]

In an exp-run (bin/156306) it appeared that "let" is close enough to
bash's and ksh's builtin that a few ports depend on it. Therefore I plan
to keep "let" in 9.x, perhaps removing it for 10.0. "exp" might be
removed for 9.0.

I updated the originator address of the PR from gamato@pobox.sk to
gamato@users.sf.net as requested earlier.

-- 
Jilles Tjoelker
Comment 6 dfilter service freebsd_committer freebsd_triage 2011-05-27 21:53:20 UTC
Author: jilles
Date: Fri May 27 20:53:07 2011
New Revision: 222386
URL: http://svn.freebsd.org/changeset/base/222386

Log:
  sh: Remove the "exp" builtin.
  
  The "exp" builtin is undocumented, non-standard and not very useful.
  
  If exp's return value is not used, something like
  VAR=$(exp EXPRESSION)
  is equivalent to
  VAR=$((EXPRESSION))
  except that errors in the expression are fatal and quoting special
  characters is not needed in the latter case.
  
  If exp's return value is used, something like
  if exp EXPRESSION >/dev/null
  can be replaced by
  if [ $((EXPRESSION)) -ne 0 ]
  with similar differences.
  
  The exp-run showed that "let" is close enough to bash's and ksh's builtin
  that removing it would break a few ports. Therefore, "let" remains in 9.x.
  
  PR:		bin/104432
  Exp-run done by: pav (with some other sh(1) changes)

Modified:
  head/bin/sh/arith_yacc.c
  head/bin/sh/builtins.def

Modified: head/bin/sh/arith_yacc.c
==============================================================================
--- head/bin/sh/arith_yacc.c	Fri May 27 20:34:23 2011	(r222385)
+++ head/bin/sh/arith_yacc.c	Fri May 27 20:53:07 2011	(r222386)
@@ -344,7 +344,7 @@ arith_t arith(const char *s)
  *  The exp(1) builtin.
  */
 int
-expcmd(int argc, char **argv)
+letcmd(int argc, char **argv)
 {
 	const char *p;
 	char *concat;

Modified: head/bin/sh/builtins.def
==============================================================================
--- head/bin/sh/builtins.def	Fri May 27 20:34:23 2011	(r222385)
+++ head/bin/sh/builtins.def	Fri May 27 20:53:07 2011	(r222386)
@@ -60,7 +60,7 @@ echocmd		echo
 evalcmd		-s eval
 execcmd		-s exec
 exitcmd		-s exit
-expcmd		exp let
+letcmd		let
 exportcmd	-s export -s readonly
 #exprcmd		expr
 falsecmd	false
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
Comment 7 Eitan Adler freebsd_committer freebsd_triage 2017-12-31 08:01:24 UTC
For bugs matching the following criteria:

Status: In Progress Changed: (is less than) 2014-06-01

Reset to default assignee and clear in-progress tags.

Mail being skipped
Comment 8 Oleksandr Tymoshenko freebsd_committer freebsd_triage 2019-01-19 19:27:34 UTC
Partial fix was committed, closing as "fixed". Please re-open the PR if the remaining part is still valid.