Подстановочный знак Bash для совпадения ровно n символов


8

Есть ли в bash подстановочный знак, точно совпадающий с 5 символами, сокращая ?????

Ответы:


9

Еще нет.

С помощью этой extglobопции bashдобавляются некоторые kshрасширенные операторы глобирования, но не {x,y}(pattern)один.

В ksh93, вы используете:

{5}(?)

С zshс extendedglobопцией:

?(#c5)

(вы заметите, что ни один из них не короче, чем ?????хотя бы).

В bash, вы можете сделать:

$(printf '%.0s?' {1..5})

хотя это вряд ли улучшение и полагается на $IFSне содержать ?.


Позволяет ли что-либо из них использовать переменную для 5?
Random832

@ Random832, да все, кроме 3-го bash(с этим также можно работать с ksh93 или zsh в эмуляции sh / ksh). С bash, вы можете использовать $(seq "$n" | tr -cd '\n' | tr '\n' '?')вместо.
Стефан Шазелас

Или $(yes '?' | tr -cd '?' | head -c $n)- это весело. Кроме того, не могли бы вы удалить зависимость $ IFS, поместив ее в «кавычки»?
Random832

@ Random832, нет. На этот раз (и это, вероятно, единственный раз, когда вы захотите это сделать), вы действительно хотите использовать split+globоператор (оставляя расширение без кавычек), но только globчасть (вы хотите, чтобы этот ?????шаблон был расширен, что не произойдет если вы цитировали $(...)). Обратите внимание, что вы используете этот split+globоператор в кавычках, $nчто добавляет еще одно требование, которое $IFSне должно содержать цифр. Тот, который вы можете и должны процитировать.
Стефан Шазелас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.