Bash-Platzhalter für genau n Zeichen

8

Gibt es einen Platzhalter in Bash, der genau 5 Zeichen entspricht und ein Muster wie verkürzt? ?????

Das Ö
quelle

Antworten:

9

Noch nicht.

Mit dieser extglobOption werden basheinige ksherweiterte Globbing-Operatoren hinzugefügt, jedoch nicht der {x,y}(pattern)eine.

In verwenden ksh93Sie:

{5}(?)

Mit zshmit der extendedglobOption:

?(#c5)

(Sie werden feststellen, dass keiner von ihnen kürzer ist als ?????).

In bashkönnten Sie tun:

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

obwohl das kaum eine Verbesserung ist und darauf beruht, $IFSnicht zu enthalten ?.

Stéphane Chazelas
quelle
Erlaubt eine davon die Verwendung einer Variablen für 5?
Random832
@ Random832, ja alle außer dem 3. mit bash(das würde aber auch mit ksh93 oder zsh in der sh / ksh-Emulation funktionieren). Mit bashkönnten Sie $(seq "$n" | tr -cd '\n' | tr '\n' '?')stattdessen verwenden.
Stéphane Chazelas
Oder $(yes '?' | tr -cd '?' | head -c $n)- das macht Spaß. Könnten Sie die $ IFS-Abhängigkeit nicht entfernen, indem Sie sie in "Anführungszeichen" setzen?
Random832
@ Random832, nein. Dieses Mal (und dies ist wahrscheinlich das einzige Mal, dass Sie dies jemals tun möchten) möchten Sie den split+globOperator verwenden (wobei eine Erweiterung nicht in Anführungszeichen gesetzt wird), aber nur den globTeil (Sie möchten, dass dieses ?????Muster erweitert wird, was nicht passieren würde) wenn Sie zitiert haben $(...)). Beachten Sie, dass Sie diesen split+globOperator mit Ihrem nicht zitierten verwenden, $nwodurch eine weitere Anforderung hinzugefügt wird, die $IFSkeine Ziffern enthalten darf. Das können und sollten Sie zitieren.
Stéphane Chazelas