Оболочка программы, ошибка в цикле.Переменная не используется - PullRequest
0 голосов
/ 13 декабря 2018

Я новичок в сценариях оболочки.Мой код должен быть очень простым, довольно учебным, но я не могу заставить его работать:

case='Naca0012_pitch_V1'
for i in {0..800..10} 
do
    tec $case.$i.plt;
    cat tec.00* > $case.$i.dat;
done

Команда tec генерирует некоторые файлы, которые мне нужно объединить.

Что я получаю:

Error opening file Naca0012_pitch_V1.{0..800..10}.plt

из утилиты tec.

Кажется, что код помещает "{0..800..10}" вместо замены переменной одним из возможных случаев из раскрытия фигурной скобки.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы пытаетесь использовать расширение скобок.В зависимости от используемой оболочки расширение скобок поддерживается или нет.Оболочками, которые не поддерживают расширение скобок, являются POSIX и .Оболочки, поддерживающие расширение скобок: , и .

Совместимые с Posix оболочки (sh или dash): Если вы хотите имитировать этот вид расширения скобок в sh или dash, вам нужно сделать что-то вроде

for i in `seq 0 10 800`; do
  ...
done

Отключить расширение скобок: Хотя , и все поддерживают расширение скобки, возможно, оно было отключено.Для и это можно сделать, выполнив команду

$ set +B
$ for i in {0..800..10}; do echo $i; done
{0..800..10} 
0 голосов
/ 13 декабря 2018

Ваш цикл неверен.

Если ваше намерение повторяется от 0 до, скажем, 800. Ваш цикл должен быть таким, как

for n in $(seq 1 100)
do 
    #yourcode 
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...