Marc Espie:

> Until a patch from naddy, I wasn't even aware of getopts in sh(1)

Let's start the discussion with this instead.

This puts the deprecation notice in getopt.1 in a prominent place,
and uses the same snippet in sh.1 and ksh.1.

Index: bin/ksh/ksh.1
===================================================================
RCS file: /cvs/src/bin/ksh/ksh.1,v
retrieving revision 1.214
diff -u -p -r1.214 ksh.1
--- bin/ksh/ksh.1       11 Mar 2021 07:04:12 -0000      1.214
+++ bin/ksh/ksh.1       30 Apr 2021 14:40:52 -0000
@@ -3219,6 +3219,25 @@ resetting
 .Ev OPTIND ,
 may lead to unexpected results.
 .Pp
+The following code fragment shows how one might process the arguments
+for a command that can take the option
+.Fl a
+and the option
+.Fl o ,
+which requires an argument.
+.Bd -literal -offset indent
+while getopts ao: name
+do
+       case $name in
+       a)      flag=1 ;;
+       o)      oarg=$OPTARG ;;
+       ?)      echo "Usage: ..."; exit 2 ;;
+       esac
+done
+shift $(($OPTIND - 1))
+echo "Non-option arguments: " "$@"
+.Ed
+.Pp
 .It Xo
 .Ic hash
 .Op Fl r
Index: bin/ksh/sh.1
===================================================================
RCS file: /cvs/src/bin/ksh/sh.1,v
retrieving revision 1.152
diff -u -p -r1.152 sh.1
--- bin/ksh/sh.1        22 May 2019 15:23:23 -0000      1.152
+++ bin/ksh/sh.1        30 Apr 2021 14:45:22 -0000
@@ -508,6 +508,25 @@ is a colon,
 .Ev OPTARG
 is set to the unsupported option,
 otherwise an error message is displayed.
+.Pp
+The following code fragment shows how one might process the arguments
+for a command that can take the option
+.Fl a
+and the option
+.Fl o ,
+which requires an argument.
+.Bd -literal -offset indent
+while getopts ao: name
+do
+       case $name in
+       a)      flag=1 ;;
+       o)      oarg=$OPTARG ;;
+       ?)      echo "Usage: ..."; exit 2 ;;
+       esac
+done
+shift $(($OPTIND - 1))
+echo "Non-option arguments: " "$@"
+.Ed
 .It Ic hash Op Fl r | Ar utility
 Add
 .Ar utility
Index: usr.bin/getopt/getopt.1
===================================================================
RCS file: /cvs/src/usr.bin/getopt/getopt.1,v
retrieving revision 1.19
diff -u -p -r1.19 getopt.1
--- usr.bin/getopt/getopt.1     16 Mar 2018 16:58:26 -0000      1.19
+++ usr.bin/getopt/getopt.1     30 Apr 2021 14:25:17 -0000
@@ -14,6 +14,13 @@
 .Ar optstring
 .Va $*
 .Sh DESCRIPTION
+The
+.Nm
+utility cannot handle option arguments containing whitespace;
+consider using the standard
+.Ic getopts
+shell built-in instead.
+.Pp
 .Nm
 is used to break up options in command lines for easy parsing by
 shell procedures, and to check for legal options.

-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to