2013-05-23 3 views
6

Я пытаюсь получить 1:2:3:4:5:6:7:8:9:10 с помощью расширения {1..10} параметров и сопоставления с образцом:Bash расширение параметра Разделитель

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

есть более элегантный способ (один вкладыш), чтобы сделать это?

+1

вместо 'read var' я бы использовал' var = $ (echo {1..10}) ' – FDinoff

+2

. Мой предпочтительный способ:' echo {1..10} | sed's//:/g'' –

ответ

3

соглашаясь с @ choroba замечании об элегантности, вот некоторые другие 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

Спасибо. проще использовать опцию '-s' для' seq'. – Yang

+0

Обратите внимание, что самый переносимый способ использования 'paste' на stdin - с параметром' -' (например, BSD paste под Mac нуждается в нем). То есть 'paste -sd: -' –

8

Elegance находится в глазах смотрящего:

(set {1..10} ; IFS=: ; echo "$*") 
Смежные вопросы