Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Use of left- and right-padding with a variable padding char
- X-seq: zsh-users 26804
- From: Mikael Magnusson <mikachu@xxxxxxxxx>
- To: Zach Riggle <zachriggle@xxxxxxxxx>
- Cc: zsh-users@xxxxxxx
- Subject: Re: Use of left- and right-padding with a variable padding char
- Date: Sat, 24 Jul 2021 12:08:59 +0200
- Archived-at: <https://zsh.org/users/26804>
- In-reply-to: <CAMP9c5nbz-MnZB3VN6kD=13=7oD-naKSL+19KQXFQQLTZy-ZHg@mail.gmail.com>
- List-id: <zsh-users.zsh.org>
- References: <CAMP9c5nbz-MnZB3VN6kD=13=7oD-naKSL+19KQXFQQLTZy-ZHg@mail.gmail.com>
On 7/24/21, Zach Riggle <zachriggle@xxxxxxxxx> wrote:
> As always, thank you all so much for your time. It's genuinely
> appreciated.
>
> I want to define a function "center", which takes $1="Some String" and
> $2="-" or some other default padding value.
>
> The Zsh manual on expansion says that I can do something like this,
> which works well and as intended:
>
> function center() {
> local text="${1:-hellworld}"
> local -i columns=${COLUMNS:-$(tput cols)}
> columns=$(( columns/2 ))
> echo ${(l:${columns}::=:::r:${columns}::=:::)text}
> }
>
> This works very well, and correctly centers "${text}" across the width
> of the terminal, with "=" padding on both sides. Perfect.
>
> However, I also want to make the padding character ("=" in the above
> example) be variable.
>
> The following does NOT work as intended, and I'm not sure why. My
> understanding is that variable expansion is inside-out, so it SHOULD
> work.
>
> function center() {
> local text="${1:-hellworld}"
> local pad="${2:-=}"
> local -i columns=${COLUMNS:-$(tput cols)}
> columns=$(( columns/2 ))
> echo ${(l:${columns}::${pad}:::r:${columns}::${pad}:::)text}
> }
> center "hello" "_"
>
> The value in $1 is correctly centered, but it is padded with the
> LITERAL value '${pad}', rather than the expansion of ${pad}.
>
> I expect there's some documentation that I haven't read yet, any tips
> would be useful.
Add p and drop the braces, as in
echo ${(pl:${columns}::$pad:::r:${columns}::$pad:::)text}
p Recognize the same escape sequences as the print
builtin in string arguments to any of the flags described
below that follow this argument.
Alternatively, with this option string arguments
may be in the form $var in which case the value of
the variable is substituted. Note this form is
strict; the string argument does not undergo general
parameter expansion.
--
Mikael Magnusson
Messages sorted by:
Reverse Date,
Date,
Thread,
Author