zsh-workers
 help / color / mirror / code / Atom feed
* tr [:lower:]
@ 2021-08-31  1:04 Shineru
  2021-08-31  1:39 ` Phil Pennock
  0 siblings, 1 reply; 3+ messages in thread
From: Shineru @ 2021-08-31  1:04 UTC (permalink / raw)
  To: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 103 bytes --]

zsh 5.8.1. Arch GNU/Linux

zsh: echo "hello" | tr [:lower:] [:upper:]
zsh: no matches found: [:lower:]

[-- Attachment #2: Type: text/html, Size: 143 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: tr [:lower:]
  2021-08-31  1:04 tr [:lower:] Shineru
@ 2021-08-31  1:39 ` Phil Pennock
  2021-09-01 14:53   ` Shineru
  0 siblings, 1 reply; 3+ messages in thread
From: Phil Pennock @ 2021-08-31  1:39 UTC (permalink / raw)
  To: Shineru; +Cc: zsh-workers

On 2021-08-31 at 11:04 +1000, Shineru wrote:
> zsh 5.8.1. Arch GNU/Linux
> 
> zsh: echo "hello" | tr [:lower:] [:upper:]
> zsh: no matches found: [:lower:]

setopt nonomatch
or:  unsetopt nomatch
but: both of these are dangerous, because there's a real quoting issue
here.

% touch l p
% echo "hello" | tr [:lower:] [:upper:]
heppo
bash$ echo "hello" | tr [:lower:] [:upper:]
heppo

Without quoting,
  [:lower:] matches any of: l o w e r :
  [:upper:] matches any of: u p e r :
so the globbing turns the pipeline into:
  echo "hello" | tr "l" "p"

By default, zsh complains about unmatched patterns, rather than letting
them fall through silently.  Falling through leads to this sort of
"foot-gun" construct, where shells encourage you to do something which
"only works as long as X is not true", instead of having reliable code.

So you want, for safety, in any shell which resembles POSIX at all:

  echo 'hello' | tr '[:lower:]' '[:upper:]'

(This probably belongs on zsh-users.)

-Phil


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: tr [:lower:]
  2021-08-31  1:39 ` Phil Pennock
@ 2021-09-01 14:53   ` Shineru
  0 siblings, 0 replies; 3+ messages in thread
From: Shineru @ 2021-09-01 14:53 UTC (permalink / raw)
  To: Shineru, zsh-workers

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

Thanks!

вт, 31 авг. 2021 г. в 11:39, Phil Pennock <
zsh-workers+phil.pennock@spodhuis.org>:

> On 2021-08-31 at 11:04 +1000, Shineru wrote:
> > zsh 5.8.1. Arch GNU/Linux
> >
> > zsh: echo "hello" | tr [:lower:] [:upper:]
> > zsh: no matches found: [:lower:]
>
> setopt nonomatch
> or:  unsetopt nomatch
> but: both of these are dangerous, because there's a real quoting issue
> here.
>
> % touch l p
> % echo "hello" | tr [:lower:] [:upper:]
> heppo
> bash$ echo "hello" | tr [:lower:] [:upper:]
> heppo
>
> Without quoting,
>   [:lower:] matches any of: l o w e r :
>   [:upper:] matches any of: u p e r :
> so the globbing turns the pipeline into:
>   echo "hello" | tr "l" "p"
>
> By default, zsh complains about unmatched patterns, rather than letting
> them fall through silently.  Falling through leads to this sort of
> "foot-gun" construct, where shells encourage you to do something which
> "only works as long as X is not true", instead of having reliable code.
>
> So you want, for safety, in any shell which resembles POSIX at all:
>
>   echo 'hello' | tr '[:lower:]' '[:upper:]'
>
> (This probably belongs on zsh-users.)
>
> -Phil
>

[-- Attachment #2: Type: text/html, Size: 1694 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-09-01 14:54 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-31  1:04 tr [:lower:] Shineru
2021-08-31  1:39 ` Phil Pennock
2021-09-01 14:53   ` Shineru

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).