[tz] [PROPOSED 09/12] Avoid an awk invocation via $'...'

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


* NEWS: Mention this.
* tzselect.ksh (CUNEIFORM_SIGN_URU_TIMES_KI): New variable.  This
uses $'...' if available, which avoids an awk invocation in the
typical case when Bash is used.  $'...' is available in ksh93,
bash-2.0 (1996), and any shell conforming to POSIX.1-2024.
(translit): Use it.
---
 NEWS         |  3 ++-
 tzselect.ksh | 12 +++++++-----
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/NEWS b/NEWS
index 92984445..6b71212c 100644
--- a/NEWS
+++ b/NEWS
@@ -61,7 +61,8 @@ Unreleased, experimental changes
     -DSUPPORT_POSIX2008 to CFLAGS.
 
     tzselect now assumes POSIX.2-1992 or later, as practical porting
-    targets now all support this.
+    targets now all support this.  Also, tzselect uses some features
+    from POSIX.1-2024 if available.
 
   Changes to build procedure
 
diff --git a/tzselect.ksh b/tzselect.ksh
index b1625b03..811645c2 100644
--- a/tzselect.ksh
+++ b/tzselect.ksh
@@ -163,11 +163,13 @@ esac
 
 # translit=true to try transliteration.
 # This is false if U+12345 CUNEIFORM SIGN URU TIMES KI has length 1
-# which means awk (and presumably the shell) do not need transliteration.
-if $AWK 'BEGIN { u12345 = "\360\222\215\205"; exit length(u12345) == 1 }'; then
-  translit=true
-else
-  translit=false
+# which means the shell and (presumably) awk do not need transliteration.
+# It is true if the byte string has some other length in characters, or
+# if this is a POSIX.1-2017 or earlier shell that does not support $'...'.
+CUNEIFORM_SIGN_URU_TIMES_KI=$'\360\222\215\205'
+if test ${#CUNEIFORM_SIGN_URU_TIMES_KI} = 1
+then translit=false
+else translit=true
 fi
 
 # Read into shell variable $1 the contents of file $2.
-- 
2.45.1



More information about the tz mailing list