шаблон глобуса не раскрывается внутри файла в zsh - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь исключить каталог из глобуса.

Это работает в командной строке:

$ export exclude=BigDir
$ for d in ^$exclude/ ; do echo "$d" ; done
SmallDir/
SmallerDir/
$

Но в файле это вообще не работает

#!/bin/zsh

exclude=BigDir
for d in ^$exclude/ ; do echo "$d" ; done

Запуск ./test или как бы я его не сохранил, печатает литерал строку

^BigDir/

Как мне заставить его правильно расширяться в файле скрипта?

1 Ответ

0 голосов
/ 20 ноября 2018

Вы неправильно используете символы глобуса ?, используемые оболочкой, и конструкции регулярного выражения ^, $. Цикл for в вашем примере может , а не подвергаться совпадению с регулярным выражением, чтобы исключить предоставленный каталог, поскольку он подвергается только расширению пути (aka. Glob extension)

Если вы не дадите знать оболочке для обработки ^ и $ как особенных, включив расширенные параметры glob extglob в bash и extendedglob в zsh, вы не сможете достичь того, что хотели сделать.

Так что вам, вероятно, просто нужно

setopt extendedglob
print -rl ^BigDir*

означает печать что угодно , кроме имен файлов, совпадающих с BigDir.

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