2013-05-23 13 views
6

Próbuję dostać 1:2:3:4:5:6:7:8:9:10 użyciu parametru {1..10} rozbudowę i dopasowanie Wzór:Bash ekspansja parametr ogranicznik

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

Czy istnieje bardziej elegancki sposób (jedno-liner), aby to zrobić?

+1

zamiast 'read var' użyłbym' var = $ (echo {1..10}) ' – FDinoff

+2

Mój preferowany sposób to' echo {1..10} | sed 's//:/g'' –

Odpowiedz

3

zgadzając się z użytkownika @ choroba komentarzu o elegancji, oto kilka innych 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

Dzięki. łatwiej użyć opcji '-s' opcji' seq'. – Yang

+0

Należy zauważyć, że najbardziej przenośnym sposobem użycia 'paste' na stdin jest parametr' -' (np. Wklej BSD pod Mac go potrzebuje). To znaczy. 'wklej -sd: -' –

8

Elegance jest w oku patrzącego:

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

Inna możliwość:

echo {1..9}: 10 | tr -d ' ' 
Powiązane problemy