Ошибка "Необработанный ввод" при использовании cdo в l oop с переменной - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь встроить строку cdo в сценарий оболочки с переменными. Как командная строка работает, но не в скрипте. Это строка cdo:

cdo -expr,'T_mask=((T > 200 ))' file_in.nc file_out.nc

В сценарии оболочки я хочу запустить ее для трех разных температурных порогов, например, 200, 250, 300.

Это код:

T_string='T_mask=((T > '
fileA='file_in.nc'
fileB='file_out.nc'
for T_var in 200 250 300; do
    cdo_string="'$T_string$T_var))'"
    cdo  -expr,$cdo_string  $fileA $fileB
done

Я получаю следующую ошибку:

cdo (Abort): Unprocessed Input, could not process all Operators/Files

echo дает правильную строку:

cdo -expr,'T_mask=((T > 200))' file_in.nc file_out.nc

Что сделал Я скучаю? Дефисы установлены правильно?

1 Ответ

0 голосов
/ 17 июня 2020

Переменная $T_string кажется ненужной. При использовании переменных оболочки с одинаковыми именами всегда используйте фигурные скобки.

Попробуйте это:

fileA='file_in.nc'
fileB='file_out.nc'
for T_var in 200 250 300; do
    cdo  -expr,'T_mask=((T > '"${T_var}"'))'  "${fileA}" "${fileB}"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...