2013-05-23 24 views
6

Ich versuche 1:2:3:4:5:6:7:8:9:10 mit dem Parameter Expansion {1..10} und Pattern-Matching zu erhalten:Bash Parameter Expansion Begrenzer

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

Gibt es eine elegantere Möglichkeit (Einzeiler), dies zu tun?

+1

anstelle von 'read var' würde ich' var = $ (echo {1..10}) ' – FDinoff

+2

verwenden. Mein bevorzugter Weg ist' echo {1..10} | sed 's//:/g'' –

Antwort

3

mit @ Kommentar über Eleganz des choroba Einigung, hier sind einige andere beholdables:

# 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: 
+0

Danke. einfacher zu verwenden '-s' Option von' seq'. – Yang

+0

Beachten Sie, dass die portabelste Art, 'Paste' in stdin zu verwenden, mit dem Parameter' -' verbunden ist (z. B. BSD-Paste unter Mac benötigt es). I.e. 'einfügen -sd: -' –

8

Eleganz liegt im Auge des Betrachters:

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

Eine andere Möglichkeit:

echo {1..9}: 10 | tr -d ' '