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'utiliserais
var = $ (echo {1..10}) code>
Ma manière préférée est
echo {1..10} | s / /: / g ' code>