2013-05-23 25 views
6

sto cercando di ottenere 1:2:3:4:5:6:7:8:9:10 tramite l'espansione di parametro {1..10} e pattern matching:Bash delimitatore espansione di parametro

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

C'è un modo più elegante (one-liner) per fare questo?

+1

invece di 'read var' vorrei usare' var = $ (echo {1..10}) ' – FDinoff

+2

Il mio modo preferito è' echo {1..10} | sed 's//:/g'' –

risposta

3

In accordo con commento di @ choroba su eleganza, ecco alcuni altri 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

Grazie. più facile usare l'opzione '-s' di' seq'. – Yang

+0

Si noti che il modo più portabile per usare 'paste' su stdin è con il parametro' -' (ad esempio, BSD paste in mac ne ha bisogno). Cioè 'incolla -sd: -' –

8

eleganza è negli occhi di chi guarda:

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

Altra possibilità:

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