Это, скорее всего, относится к локали, в которых символы верхнего и нижнего регистра упорядочены в чередовании, а не сначала один, затем другой:
$ echo "$LANG"
en_US.UTF-8
$ touch a A z Z
$ ls
A Z a z
$ bash -c 'echo [a-z]'
a A z
Тем не менее, соответствующий класс символов работает:
$ bash -c 'echo [[:lower:]]'
a z
Но может также совпадать не только с a
поz
:
$ LANG=fi_FI.UTF-8
$ touch ä Ä ö Ö
$ bash -c 'echo [[:lower:]]'
a z ä ö
Если вы хотите избежать этого и сопоставлять только английские строчные буквы от a
до z
, Bash, в частности, имеет возможность интерпретировать диапазоны в порядке ASCII:
$ bash -c 'shopt -s globasciiranges; echo [a-z]'
a z
И вы всегда можете установить порядок сортировки по умолчанию:
$ LC_COLLATE=C bash -c 'echo [a-z]'
a z
Что касается того, что говорит POSIX, мне кажется, что диапазоны выражений в квадратных скобках остаются неопределенными в локалях, отличных от POSIX по умолчанию. Описание сопоставления с образцом относится к описанию регулярных выражений скобочных выражений , в котором говорится:
In the POSIX locale, a range expression represents the set of collating elements that fall between two elements in the collation sequence, inclusive. In other locales, a range expression has unspecified behavior: strictly conforming applications shall not rely on whether the range expression is valid, or on the set of collating elements matched.
Вместо chroot используйте контейнер, например docker (есть много других):
Как бы то ни было, я вижу, что вы просите, чтобы это было легче решить с помощью простой изоляции пользователей. :Отдельная учетная запись для каждого пользователя. Затем вы можете дополнить это обязательным -доступом -контролем (, например. броня приложения ).
Однако все это усложняется тем, что вы используете WSL. WSL — это Gnu/Linux для MS -Windows. WSL — это Gnu/Linux с заменой Linux. Я не уверен, что WSL2 намного лучше. Все, что мы обсуждаем, сделано в Linux-части Gnu/Linux, и в наибольшей степени склонно не работать (или работать по-другому ), если не работает настоящая система Gnu/Linux. Общая файловая система -— большая область несовместимости. Это затрудняет использование прав доступа к файлам, чтобы разделить пользователей.
Я слышал, что Docker работает на MS -Windows, я думаю, он делает это, помещая Gnu/Linux в виртуальную машину (, но я не уверен ).