8
votes

Délimiteur d'expansion des paramètres bash

J'essaie d'obtenir 1: 2: 3: 4: 5: 6: 7: 8: 9: 10 code> Utilisation de paramètres dilatation {1..10} code > et correspondance des motifs:

$ var=$(echo {1..10})
$ echo ${var// /:}
1:2:3:4:5:6:7:8:9:10


2 commentaires

Au lieu de Lire Var J'utiliserais var = $ (echo {1..10})


Ma manière préférée est echo {1..10} | s / /: / g '


3 Réponses :


10
votes

élégance est dans l'oeil du spectateur:

( set {1..10} ; IFS=: ; echo "$*" )


0 commentaires

4
votes

En accord avec le commentaire de @ Choroba sur l'élégance, voici quelques autres voir:

# seq is a gnu core utility
seq 1 10 | paste -sd:
# Or:
seq -s: 1 10

# {1..10} is bash-specific
printf "%d\n" {1..10} | paste -sd:

# posix compliant
yes | head -n10 | grep -n . | cut -d: -f1 | paste -sd:


2 commentaires

Notez que le moyen le plus portable d'utiliser coller sur stdin est avec le paramètre - (E.G. Coller BSD sous Mac en a besoin). C'est à dire. Pâte -SD: -


Une autre solution POSIX utilisant un seul appel externe: awk 'commence {o = 1; pour (i = 2; i <11; i ++) O = O ":" I; imprimer o} ' et voici une solution POSIX qui n'a pas besoin d'appels externes du tout: i = 1 o = 1; tandis que [$ i -le 9]; faire o = $ o: $ ((i + = 1)); Fini; echo $ o



1
votes

Une autre possibilité: xxx


0 commentaires