Неправильное расширение параметров класса символов Bash

Вот все шаги, которые, кажется, предлагают мне ошибку в bash.

Информация о версии и платформе

--> cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.5 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
--> bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Подробные шаги выпуска:

--> ls
--> touch a aa aaa b bb bbb
--> ls *[:alpha:]
a  aa  aaa
--> rm a aa aaa
--> ls *[:alpha:]
ls: cannot access *[:alpha:]: No such file or directory

Почему бы '* [: alpha:]' перечислить имена файлов a *, а не имена b *?

Для тех, кому интересно, чтобы получить правильное поведение, нужно использовать *([[:alpha:]]). Но это не объясняет несоответствие, показанное здесь.

1 ответ

Решение

Здесь нет противоречий. При удалении повторяющихся символов [:alpha:] эквивалентно [:alph], Так что ls *[:alpha:] действительно эквивалентно ls *[:alph], и только a, aa а также aaa сопоставьте это, так что это то, что вы получили в качестве вывода. После того, как вы удалили эти файлы,ls *[:alph] не найдет совпадений, следовательно, ошибка, которую вы получили.

Если вы хотите использовать [:alpha:] класс персонажа, вам нужно написать как [[:alpha:]],

Другие вопросы по тегам