如何将具有可变文件名的多个文件传递到粘贴命令

问题描述 投票:0回答:2

通常,当我们希望按列连接多个文件,并且文件名只是连续递增的整数时,我们可以执行以下操作:

#Imagine I have 10 files
paste {1..10} > out

但是,我当前正在处理一个范围是变量的脚本,所以我希望能够做这样的事情

first=1
last=10
paste {"${first}".."${last}"} > out

这不起作用,因为变量不能在花括号内正确展开。我可以使用其他语法来达到相同的结果吗?

bash shell command paste
2个回答
2
投票

如果您不想使用eval,则可以使用seq(1)

seq -s ' ' "$first" "$last"

例如:

paste $(seq -s ' ' "$first" "$last") > out

1
投票

从前,需要一个类似seq的函数,但是要更快一些,所以我做到了这一点

# Create sequence like {0..X}
cnt () { printf -v N %$1s; N=(${N// / 1}); printf "${!N[*]}"; }

$ cnt 5
0 1 2 3 4

并且如果我们稍加修改的话

# Create sequence like {X..Y}
cnt () { printf -v N %$2s; N=(${N// / 1}); N=(${!N[@]}); printf "${N[*]:$1} ${#N[@]}"; }

$ cnt 7 11
7 8 9 10 11
© www.soinside.com 2019 - 2024. All rights reserved.