Bash оценка выражения. []. [] - PullRequest
11 голосов
/ 27 июня 2019

Рассмотрим следующие оценки выражений:

$ echo .
.
$ echo .[]
.[]
$ echo .[].
.[].
$ echo .[].[]
..                # <- WAT??
$ echo .[].[].
.[].[].
$ echo .[].[].[]
.[].[].[]

Может кто-нибудь объяснить, почему .[].[] имеет такое особое поведение?

(Проверено в bash 3.2.57(1)-release (x86_64-apple-darwin18) и 4.4.23(1)-release (arm-unknown-linux-androideabi).

Я подозреваю, что это как-то связано с .., являющимся допустимым "файлом" (родительским каталогом). Но тогда почему нет, например .[]. дать тот же результат?

1 Ответ

10 голосов
/ 27 июня 2019

Это потому, что [] создает класс персонажа. Как правило, ] необходимо экранировать (с обратной косой чертой), чтобы включить в класс, но вам не нужно избегать его, если он сразу следует за открывающей скобкой. Следовательно, [].[] фактически означает [\].[], который соответствует любому из символов ., ] и [.

Вы можете проверить это, создав файлы с именами .] и .[.

touch .\[ .\]
echo .[].[]  # .. .[ .]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...