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 >