Caractère générique bash pour faire correspondre exactement n caractères

8

Y a-t-il un caractère générique dans bash pour correspondre exactement à 5 caractères, raccourcissant un motif comme ?????

Théo
la source

Réponses:

9

Pas encore.

Avec l' extgloboption, bashajoute certains des kshopérateurs de globalisation étendus mais pas {x,y}(pattern)celui.

Dans ksh93, vous utilisez:

{5}(?)

Avec zshavec l' extendedgloboption:

?(#c5)

(vous remarquerez qu'aucun d'eux n'est plus court que ?????si).

Dans bash, vous pourriez faire:

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

bien que ce ne soit guère une amélioration et repose sur le fait de $IFSne pas contenir ?.

Stéphane Chazelas
la source
Est-ce que l'un d'eux permet d'utiliser une variable pour 5?
Random832
@ Random832, oui tous sauf le 3ème avec bash(celui-ci fonctionnerait également avec ksh93 ou zsh dans l'émulation sh / ksh). Avec bash, vous pouvez utiliser à la $(seq "$n" | tr -cd '\n' | tr '\n' '?')place.
Stéphane Chazelas
Ou $(yes '?' | tr -cd '?' | head -c $n)- c'est amusant. De plus, ne pourriez-vous pas supprimer la dépendance $ IFS en la mettant entre "guillemets"?
Random832
@ Random832, non. Cette fois (et c'est probablement la seule fois que vous voudrez le faire), vous voulez utiliser l' split+globopérateur (en laissant une expansion sans guillemets) mais uniquement la globpartie (vous voulez que ce ?????modèle soit développé, ce qui ne se produirait pas) si vous avez cité $(...)). Notez que vous utilisez cet split+globopérateur avec vos guillemets, $nce qui ajoute une autre exigence qui $IFSne doit pas contenir de chiffres. Celui que vous pouvez et devez citer.
Stéphane Chazelas