Настройте удар globbing

Полезно помнить это [ на самом деле команда, обычно также доступная как test. В ударе это - встроенное, таким образом, Вы видите документацию с man builtin.

В этом documentaiton:

          test and [ evaluate conditional expressions using a set of rules
          based on the number of arguments.

          0 arguments
                 The expression is false.
          1 argument
                 The expression is true if and only if the argument is not
                 null.
          2 arguments
                 [...]
          3 arguments
                 [...]

Правила с двумя аргументами являются различными тестами, и с тремя аргументами обычно являются сравнениями. При помещении пространства вокруг = Вы получаете три аргумента. Но когда Вы соединяете все это, Вы получаете один аргумент, и как Вы видите, если тот аргумент не является нулевым, это возвращает true.

4
13.03.2012, 08:29
3 ответа

К сожалению, я должен ответить на свой собственный вопрос. Это было GLOBIGNORE. Из страницы справочника:

Разделенный от двоеточия список шаблонов, определяющих набор имен файлов, которые будут проигнорированы расширением пути. Если имя файла, подобранное шаблоном расширения пути также, соответствует одному из шаблонов в GLOBIGNORE, это удалено из списка соответствий.

2
27.01.2020, 20:58

"ls: не может получить доступ к.*: Никакой такой файл или каталог" ошибка не кажется, что существуют проблемы полномочий с текущим каталогом. Я могу воспроизвести его с:

$ mkdir -p ~/tmp/tmp
$ cd ~/tmp/tmp
$ ls .*
.:

..:
tmp
$ chmod u-r .
$ ls .*
ls: cannot access .*: No such file or directory
$ ls -ldn .
d-wxr-xr-x 2 1000 1000 4096 2012-03-12 18:31 .
$ chmod u+r .
$ ls .*
.:

..:
tmp

Я предложил бы работать chmod +r . и попытка ls .* снова.

1
27.01.2020, 20:58
  • 1
    Это интересно, но не может быть причиной. Соответствующий каталог - мой $HOME и полномочия правильные (700). –  maaartinus 13.03.2012, 04:29

Более, чем вероятно, что у Вас нет файлов, являющихся согласованным шариками. Если никакие файлы не подобраны, bash по умолчанию интерпретирует * буквально. Можно хотеть установить nullglob использование shopt -s nullglob избегать этого (хотя это оставит команду лишенной аргументов в целом, если никакие файлы не будут подобраны).

0
27.01.2020, 20:58
  • 1
    Вы правы в том, что Вы говорите о не соответствии. Но это должно соответствовать, существуют тонны .foo файлы в моем корневом каталоге, и т.д. –  maaartinus 13.03.2012, 00:09
  • 2
    По крайней мере, .* должен соответствовать . и .., что означает, что это должно всегда соответствовать. –  Matthew Scharley 13.03.2012, 02:34
  • 3
    @MatthewScharley - А-ч, положительная сторона. –  Chris Down 13.03.2012, 05:12

Теги

Похожие вопросы