у вас есть файл с именем r
, поэтому [: upper:]
заменяется на r
.
try
tr '[:lower:]' '[:upper:]'
(править) my test
%_ ls
%_ echo [:upper:]
[:upper:]
%_ touch r
%_ echo [:upper:]
r
%_
bash анализирует вашу командную строку в несколько этапов, одна из которых - «подстановка», также известная как расширение имени файла. Поэтому, когда bash видит tr [: lower:] [: upper:]
, он переходит и находит двоичный файл tr, затем видит скобки [...]
и говорит «ах , поэтому вы хотите сопоставить файлы, имена которых содержат один из следующих символов: :
, l
, o
, w
, e
или r
. Я вижу файл с именем r
- готово!
Если файла r не было, bash не может и делает не расширять подстановку [...]
.