Bash参数扩展分隔符

Bash参数扩展分隔符,bash,parameters,Bash,Parameters,我正在尝试使用参数扩展{1..10}和模式匹配来获取1:2:3:4:5:6:7:8:9:10: $ var=$(echo {1..10}) $ echo ${var// /:} 1:2:3:4:5:6:7:8:9:10 有没有更优雅的方式(一行)来做到这一点呢?优雅在旁观者眼中: ( set {1..10} ; IFS=: ; echo "$*" ) 同意@choroba关于优雅的评论,以下是一些其他的赏识: # seq is a gnu core utility seq 1 10 | pa

我正在尝试使用参数扩展
{1..10}
和模式匹配来获取
1:2:3:4:5:6:7:8:9:10

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

有没有更优雅的方式(一行)来做到这一点呢?

优雅在旁观者眼中:

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

同意@choroba关于优雅的评论,以下是一些其他的赏识:

# 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:
另一种可能性:

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

我将使用
var=$(echo{1..10})
而不是
read var
,我的首选方法是
echo{1..10}sed的//:/g'
注意,在stdin上使用
paste
的最方便的方法是使用
-
参数(例如,mac下的BSD paste需要它)。例如,
paste-sd:-
使用单个外部调用的另一个POSIX解决方案:
awk'BEGIN{o=1;for(I=2;I