Как передать несколько файлов с переменными именами файлов в команду вставки - PullRequest
0 голосов
/ 19 января 2020

Обычно, когда мы объединяем несколько файлов по столбцам, а имена файлов являются просто последовательными увеличивающимися целыми числами, мы можем сделать следующее:

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

Однако в настоящее время я работаю над скрипт, в котором диапазоны являются переменными, поэтому я хочу иметь возможность делать что-то вроде этого

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

Это не работает, поскольку переменные не могут быть правильно расширены в фигурных скобках. Есть ли альтернативный синтаксис, который я могу использовать для достижения того же результата?

Ответы [ 2 ]

2 голосов
/ 19 января 2020

Если вы не хотите использовать eval, вы можете использовать seq (1) :

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

Примерно так:

paste $(seq -s ' ' "$first" "$last") > out
1 голос
/ 20 января 2020

Когда-то давно нужна была функция, похожая на 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
...