2013-05-23 30 views
6

Tôi đang cố gắng để có được 1:2:3:4:5:6:7:8:9:10 sử dụng tham số mở rộng {1..10} và khớp mẫu:Bash mở rộng tham số delimiter

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

Có một cách thanh lịch hơn (one-liner) để làm điều này?

+1

thay vì 'read var' tôi sẽ sử dụng' var = $ (echo {1..10}) ' – FDinoff

+2

Cách ưa thích của tôi là' echo {1..10} | sed 's//:/g'' –

Trả lời

3

Đồng ý với bình luận @ choroba về sự thanh lịch, đây là một số beholdables khác:

# 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

Cảm ơn. dễ sử dụng '-s' tùy chọn' seq'. – Yang

+0

Lưu ý rằng cách di động nhất để sử dụng 'dán' trên stdin là với tham số' -' (ví dụ: dán BSD trong mac cần nó). I E. 'dán -sd: -' –

8

Elegance là trong mắt của kẻ si tình:

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

Một khả năng khác:

echo {1..9}: 10 | tr -d ' ' 
Các vấn đề liên quan