On Sat, Jan 25, 2025 at 4:06 PM Andreas Kähäri <[email protected]>
wrote:
>
> Sorry, I pressed send too quickly. I was going to suggest an alternative
> to using a command substitution and tr:
>
> printf -v foo '%*s' 80 ' '
> echo "${foo// /*}"
>
> --
> Andreas (Kusalananda) Kähäri
> Uppsala, Sweden
>
>
While we are showing printf tricks, we can notice we are cheating a bit
here, the foo variable is set to a serie of space ' ' and then each access
to this variable require a space substitute with your desired char-pattern
here '*', unless you re-assign the variable with the subsitution i.e
printf -v foo '%*s' 80 ' '
foo="${foo// /*}"
echo "${foo}"
In order to get foo set up with a desired number of '*' (or any 1 char
pattern you like) you may consider this one :-)
$ printf -v foo "%(*)T" {1..4} ; echo "'$foo'"
'****'
I admit it is a kind of abuse :-)
Note the upper bound is hard coded though (as 80 in your example).
To get a parametrisable upper bound and without fork/exec (eliminating
seq(1)) we can consider this one that is still fast and more general
$ c=10
$ foo='' ; while((${#foo}<c)) do foo+='*'; done
$ echo $"'$foo'"
'**********'
I guess there are more :-)