Полезно помнить это [
на самом деле команда, обычно также доступная как 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.
К сожалению, я должен ответить на свой собственный вопрос. Это было GLOBIGNORE
. Из страницы справочника:
Разделенный от двоеточия список шаблонов, определяющих набор имен файлов, которые будут проигнорированы расширением пути. Если имя файла, подобранное шаблоном расширения пути также, соответствует одному из шаблонов в GLOBIGNORE, это удалено из списка соответствий.
"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 .*
снова.
$HOME
и полномочия правильные (700).
– maaartinus
13.03.2012, 04:29
Более, чем вероятно, что у Вас нет файлов, являющихся согласованным шариками. Если никакие файлы не подобраны, bash
по умолчанию интерпретирует *
буквально. Можно хотеть установить nullglob
использование shopt -s nullglob
избегать этого (хотя это оставит команду лишенной аргументов в целом, если никакие файлы не будут подобраны).
.foo
файлы в моем корневом каталоге, и т.д.
– maaartinus
13.03.2012, 00:09
.*
должен соответствовать .
и ..
, что означает, что это должно всегда соответствовать.
– Matthew Scharley
13.03.2012, 02:34