На этот вопрос уже есть ответ здесь:
Я пытаюсь передать несколько строк в текстовый файл при манипулировании строкой, которая передается по конвейеру в соответствии с последовательностью
cmd="My string 00"
for i in $(seq -f "%02g" 00 05); \
do \
echo $(echo $cmd | sed -e 's|00|$(echo $i)|g') >> outfile.txt ; \
done
, не работает. Результат должен выглядеть следующим образом:
My string 00
My string 01
My string 02
My string 03
My string 04
My string 05
, но результат будет следующим:
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
for i in {00000..00005}; do echo "${i/???/My string }"; done >> outfile.txt
Вывод к outfile.txt:
My string 00
My string 01
My string 02
My string 03
My string 04
My string 05
Можно сделать все это с printf
и расширение фигурной скобки:
$ printf 'My string %02d\n' {0..5} > outfile.txt
$ cat outfile.txt
My string 00
My string 01
My string 02
My string 03
My string 04
My string 05
Если по некоторым причинам необходимо генерировать входную последовательность с большим количеством дополнения, чем Вы действительно хотите, printf
переформатирует его для Вас:
$ printf 'My string %02d\n' $(seq -f "%05g" 00 05)
My string 00
My string 01
My string 02
My string 03
My string 04
My string 05