[tz] [PROPOSED 08/12] Avoid some subshells in tzselect

Paul Eggert eggert at cs.ucla.edu
Sat Jun 1 18:33:53 UTC 2024


* tzselect.ksh: Instead of awk, use ${##}, $((...)), ${V##...},
${V%%...}.  This OK now that tzselect assumes POSIX.2-1992.
---
 tzselect.ksh | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/tzselect.ksh b/tzselect.ksh
index a76bce64..b1625b03 100644
--- a/tzselect.ksh
+++ b/tzselect.ksh
@@ -103,8 +103,7 @@ then
 else
   doselect() {
     # Field width of the prompt numbers.
-    print_nargs_length="BEGIN {print length(\"$#\");}"
-    select_width=$($AWK "$print_nargs_length")
+    select_width=${##}
 
     select_i=
 
@@ -115,14 +114,14 @@ else
 	select_i=0
 	for select_word
 	do
-	  select_i=$($AWK "BEGIN { print $select_i + 1 }")
+	  select_i=$(($select_i + 1))
 	  printf >&2 "%${select_width}d) %s\\n" $select_i "$select_word"
 	done;;
       *[!0-9]*)
 	echo >&2 'Please enter a number in range.';;
       *)
 	if test 1 -le $select_i && test $select_i -le $#; then
-	  shift $($AWK "BEGIN { print $select_i - 1 }")
+	  shift $(($select_i - 1))
 	  select_result=$1
 	  break
 	fi
@@ -156,7 +155,7 @@ do
   esac
 done
 
-shift $($AWK "BEGIN { print $OPTIND - 1 }")
+shift $(($OPTIND - 1))
 case $# in
 0) ;;
 *) say >&2 "$0: $1: unknown argument"; exit 1
@@ -742,12 +741,9 @@ while
   do
     TZdate=$(LANG=C TZ="$TZ_for_date" date)
     UTdate=$(LANG=C TZ=UTC0 date)
-    if $AWK '
-	  function getsecs(d) {
-	    return match(d, /.*:[0-5][0-9]/) ? substr(d, RLENGTH - 1, 2) : ""
-	  }
-	  BEGIN { exit getsecs(ARGV[1]) != getsecs(ARGV[2]) }
-       ' ="$TZdate" ="$UTdate"
+    TZsecsetc=${TZdate##*[0-5][0-9]:}
+    UTsecsetc=${UTdate##*[0-5][0-9]:}
+    if test "${TZsecsetc%%[!0-9]*}" = "${UTsecsetc%%[!0-9]*}"
     then
       extra_info="
 Selected time is now:	$TZdate.
-- 
2.45.1



More information about the tz mailing list