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
3 Réponses :
élégance est dans l'oeil du spectateur:
( set {1..10} ; IFS=: ; echo "$*" )
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:
Notez que le moyen le plus portable d'utiliser coller code> sur stdin est avec le paramètre - code> (E.G. Coller BSD sous Mac en a besoin). C'est à dire. Pâte -SD: - Code>
Une autre solution POSIX utilisant un seul appel externe: awk 'commence {o = 1; pour (i = 2; i <11; i ++) O = O ":" I; imprimer o} ' code> 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 code>
Une autre possibilité:
Au lieu de
Lire Var code> J'utiliseraisvar = $ (echo {1..10}) code>Ma manière préférée est
echo {1..10} | s / /: / g ' code>