Это похоже на задание для Brace Expansion, плюс немного eval над строковыми манипуляциями:
MyVariable=$(eval "printf '%s' /path/to/files{${Start:0:2}..${Stop:0:2}}\;")
Затем вы можете избавиться от последнего двоеточия semi -с помощью${MyVariable%;}
В приведенном выше примере я предполагаю, что ваши ${Start}
и ${Stop}
действительно всегда являются как минимум 3-значным числом, иначе вам нужно будет настроить манипуляции со строками.
Ваш скрипт не использует синтаксис sh
. Во всяком случае, это больше похоже на смесь синтаксиса ksh и zsh. Для базовой проверки синтаксиса вы можете использовать shellcheck (, доступную онлайн, или отдельную утилиту, которую вы можете установить в своей системе ).
Но в любом случае для обработки текста не следует использовать циклы оболочки .
Вы бы предпочли использовать инструмент для обработки текста. Здесь для текста, отформатированного в полях с фиксированным разделителем, очевидным будетawk
:
#! /usr/bin/sh -
input=test.txt
awk -F: '
second_pass {if (count[$2] > 1) print $1; next}
{count[$2]++}' "$input" second_pass=1 "$input"
Понятно, так что мое новое дополнение:
awk -F: 'second_pass {if (count[$2] > 1) print NR-1 "," $1; next} {count[$2]++}' "$input" second_pass=1 "$input"
Это работает! Ваше здоровье!!