Re: use of "build.sh -B BUILDID".... with patch and more questions

Jarle Greipsland <[email protected]> Mon, 08 Dec 2025 11:59:13 +0100 (CET)
Newsgroups gmane.os.netbsd.current,gmane.os.netbsd.devel.toolchain
Message-ID <[email protected]>
RVP <[email protected]> writes:
> On Fri, 5 Dec 2025, Jarle Greipsland wrote:
>>  val=${val#"${val%%[![:blank:]]*}"}
>>  val=${val%"${val##*[![:blank:]]}"}
> 
> Yes! More people should stash this in their shell tips-'n-tricks collection.
> I think you can get rid of the `"'.

For this particular operation - yes, you can.  However, if you
apply the same design pattern to a problem where the result of
the inner substring processing operation contains shell pattern
meta-characters, you shall likely want the quotes to be there.

For example:

  title="***Careful with that axe, Eugene!***"
  # Let's chop off the leading and trailing asterisk sequences
  # Here the quotation marks are neccessary!
  title=${title#"${title%%[!*]*}"}
  title=${title%"${title##*[!*]}"}

As for the original problem of removing blanks (or whitespace), I
generally prefer not to sprinkle my code with too much
cleverness.  Instead, I stash it away in one or more functions,
and then apply them as needed.  Clarity is worth a few extra
function calls.  The functions below (beware! not rigorously
tested) enable me to do both:

  trim_ws var "  lost in space  "
and
  var="  lost in space  "
  trim_ws var
In both cases var gets set to "lost in space".

# space trimming functions
# usage: trim_XXX varname [string]

trim_leading_ws() {
    if [ $# -eq 1 ]; then
	eval 'set -- "$1" ${'"$1"'+"${'"$1"'}"}'
    fi
    if [ "${2+set}" ]; then
	eval "$1=\${2#\"\${2%%[![:space:]]*}\"}"
    fi
}

trim_trailing_ws() {
    if [ $# -eq 1 ]; then
	eval 'set -- "$1" ${'"$1"'+"${'"$1"'}"}'
    fi
    if [ "${2+set}" ]; then
	eval "$1=\${2%\"\${2##*[![:space:]]}\"}"
    fi
}

trim_ws() {
    trim_leading_ws "$@"
    trim_trailing_ws "$1"
}

					-jarle
-- 
"Reading goes faster if you don't sweat comprehension."
					- Hobbes