On 2023-02-07 10:19, Brian Inglis via Cygwin wrote:
On 2023-02-07 05:07, Andrey Repin via Cygwin wrote:
Greetings, All!

In the attached script, that I always run using dash, the expansion is
supposed to strip leading/trailing spaces from provided parameter.

The upgrade that took place after which the expansion stopped working is

libsolv:   - dash-0.5.11.5-1.any -> dash-0.5.12-1.any

Downgrading to 0.5.11.5 restored the expected behavior.
I failed to find anything relevant in the dash 0.5.12 patch notes, but perhaps
community could help?

Good catch Andrey,

Looks like something in dash broke space trimming of any sort: see attached script and logs.

I will see what upstream has to say for themselves, or about Cygwin.

Sorry Andrey,

Stupid errors in test script, didn't actually run trim3 anyway, redone, and that and updated logs attached.

It appears the locale dependent [[:space:]] regexp no longer works but using escapes generated by echo still does, see corrected trim3, so perhaps use those for now, if you can, while I follow this upstream.

You may need to add escape sequences for any locale dependent spacing characters to the space string, so please let us know if there are.

--
Take care. Thanks, Brian Inglis                 Calgary, Alberta, Canada

La perfection est atteinte                      Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter     not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer        but when there is no more to cut
                        -- Antoine de Saint-Exupéry
#!/bin/dash -vx

trim() {
  # remove leading whitespace characters
  __trim="${*#${*%%[![:space:]]*}}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%${__trim##*[![:space:]]}}"
}

trim " alpha" | od -t x1a
+ trim  alpha
+ __trim=alpha
+ printf %s alpha
+ od -t x1a
0000000  61  6c  70  68  61
          a   l   p   h   a
0000005
trim "beta " | od -t x1a
+ trim beta 
+ __trim=beta 
+ printf %s beta
+ od -t x1a
0000000  62  65  74  61
          b   e   t   a
0000004
trim "
gamma   " | od -t x1a
+ trim 
gamma   
+ __trim=gamma  
+ printf %s gamma
+ od -t x1a
0000000  67  61  6d  6d  61
          g   a   m   m   a
0000005

trim2() {
  # remove leading whitespace characters
  __trim="${*##[[:space:]]}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%%[[:space:]]}"
}

trim2 " alpha" | od -t x1a
+ trim2  alpha
+ __trim=alpha
+ printf %s alpha
+ od -t x1a
0000000  61  6c  70  68  61
          a   l   p   h   a
0000005
trim2 "beta " | od -t x1a
+ trim2 beta 
+ __trim=beta 
+ printf %s beta
+ od -t x1a
0000000  62  65  74  61
          b   e   t   a
0000004
trim2 "
gamma   " | od -t x1a
+ trim2 
gamma   
+ __trim=gamma  
+ printf %s gamma
+ od -t x1a
0000000  67  61  6d  6d  61
          g   a   m   m   a
0000005

trim3() {
  _space="$(echo -n '[\b\t\n\v\f\r ]')"
  # remove leading whitespace characters
  __trim="${*##$_space}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%%$_space}"
}

trim3 " alpha" | od -t x1a
+ trim3  alpha
+ od -t x1a
+ echo -n [\b\t\n\v\f\r ]
+ _space=[     

 ]
+ __trim=alpha
+ printf %s alpha
0000000  61  6c  70  68  61
          a   l   p   h   a
0000005
trim3 "beta " | od -t x1a
+ trim3 beta 
+ od -t x1a
+ echo -n [\b\t\n\v\f\r ]
+ _space=[     

 ]
+ __trim=beta 
+ printf %s beta
0000000  62  65  74  61
          b   e   t   a
0000004
trim3 "
gamma   " | od -t x1a
+ trim3 
gamma   
+ + od -t x1a
echo -n [\b\t\n\v\f\r ]
+ _space=[     

 ]
+ __trim=gamma  
+ printf %s gamma
0000000  67  61  6d  6d  61
          g   a   m   m   a
0000005

#!/bin/dash -vx

trim() {
  # remove leading whitespace characters
  __trim="${*#${*%%[![:space:]]*}}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%${__trim##*[![:space:]]}}"
}

trim " alpha" | od -t x1a
+ trim  alpha
+ __trim=
+ printf %s 
+ od -t x1a
0000000
trim "beta " | od -t x1a
+ trim beta 
+ __trim=
+ printf %s 
+ od -t x1a
0000000
trim "
gamma   " | od -t x1a
+ trim 
gamma   
+ __trim=
+ printf %s 
+ od -t x1a
0000000

trim2() {
  # remove leading whitespace characters
  __trim="${*##[[:space:]]}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%%[[:space:]]}"
}

trim2 " alpha" | od -t x1a
+ trim2  alpha
+ __trim= alpha
+ printf %s  alpha
+ od -t x1a
0000000  20  61  6c  70  68  61
         sp   a   l   p   h   a
0000006
trim2 "beta " | od -t x1a
+ trim2 beta 
+ __trim=beta 
+ printf %s beta 
+ od -t x1a
0000000  62  65  74  61  20
          b   e   t   a  sp
0000005
trim2 "
gamma   " | od -t x1a
+ trim2 
gamma   
+ __trim=
gamma   
+ printf %s 
gamma   
+ od -t x1a
0000000  0d  67  61  6d  6d  61  09
         cr   g   a   m   m   a  ht
0000007

trim3() {
  _space="$(echo -n '[\b\t\n\v\f\r ]')"
  # remove leading whitespace characters
  __trim="${*##$_space}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%%$_space}"
}

trim3 " alpha" | od -t x1a
+ trim3  alpha
+ od -t x1a
+ echo -n [\b\t\n\v\f\r ]
+ _space=[     

 ]
+ __trim=alpha
+ printf %s alpha
0000000  61  6c  70  68  61
          a   l   p   h   a
0000005
trim3 "beta " | od -t x1a
+ trim3 beta 
+ od -t x1a
+ echo -n [\b\t\n\v\f\r ]
+ _space=[     

 ]
+ __trim=beta 
+ printf %s beta
0000000  62  65  74  61
          b   e   t   a
0000004
trim3 "
gamma   " | od -t x1a
+ trim3 
gamma   
+ od -t x1a
+ echo -n [\b\t\n\v\f\r ]
+ _space=[     

 ]
+ __trim=gamma  
+ printf %s gamma
0000000  67  61  6d  6d  61
          g   a   m   m   a
0000005

#!/bin/dash -vx

trim() {
  # remove leading whitespace characters
  __trim="${*#${*%%[![:space:]]*}}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%${__trim##*[![:space:]]}}"
}

trim " alpha" | od -t x1a
trim "beta " | od -t x1a
trim "
gamma   " | od -t x1a

trim2() {
  # remove leading whitespace characters
  __trim="${*##[[:space:]]}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%%[[:space:]]}"
}

trim2 " alpha" | od -t x1a
trim2 "beta " | od -t x1a
trim2 "
gamma   " | od -t x1a

trim3() {
  _space="$(echo -n '[\b\t\n\v\f\r ]')"
  # remove leading whitespace characters
  __trim="${*##$_space}"
  # remove trailing whitespace characters
  printf "%s" "${__trim%%$_space}"
}

trim3 " alpha" | od -t x1a
trim3 "beta " | od -t x1a
trim3 "
gamma   " | od -t x1a

-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to