Как мне заставить BSD seq не выводить + и e при использовании больших чисел?

Нет, это не опасно. Опция extglob не увеличивает риск случайного нанесения ущерба. Единственная причина, по которой она не включена по умолчанию - это обратная совместимость с предыдущими версиями bash, и даже тогда случаи, когда она нарушает совместимость, довольно надуманны, потому что большинство из того, что extglob позволяет, является синтаксической ошибкой, если она не установлена из-за того, что открывающая скобка встречается в слове.

$ bash -c $'echo /@(u|v)*' 
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `echo /@(u|v)*'
$ bash -c $'shopt -s extglob\necho /@(u|v)*'
/usr /var

Единственный случай, когда это нарушает совместимость с bash -without-extglob и POSIX sh - это когда шаблон расширяется из переменной. Шаблоны extglob необычны в именах файлов, поэтому на практике это вряд ли будет проблемой.

 $ bash -c $'shopt -s extglob\necho $0' '/@(u|v)*'
/usr /var
$ bash -c $'echo $0' '/@(u|v)*'
/@(u|v)*

Несовместимости достаточно благоприятны, поэтому в ksh эти шаблоны включены по умолчанию, а последние версии bash могут быть скомпилированы с включенной опцией по умолчанию (./configure --enable-extended-glob-default).

4
14.09.2016, 00:38
0 ответов

Теги

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