разбор ' внутри $()

У меня немного сложный вопрос, надеюсь, я смогу выразить его в понятной форме.

У меня есть скрипт bash, который создает аргументы для параметров командной строки.

мой сценарий

./align_v1.1  reference.tif -te -tr -t_srs

произвести (внутренним эхом) следующую строку

-te -7575475.504 -2950763.205 -6304972.004 -2027871.240 -tr 1110.579983028509332 -1110.579983028509332 -t_srs '+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '

эту строку можно использовать как параметры командной строки

gdalwarp -overwrite -te -7575475.504 -2950763.205 -6304972.004 -2027871.240 -tr 1110.579983028509332 -1110.579983028509332 -t_srs '+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ' input.tif output.tif

поэтому я должен иметь возможность передать ту же строку следующим образом

gdalwarp -overwrite $(./align_v1.1 reference.tif -te -tr -t_srs) input.tif output.tif

но я получаю следующую ОШИБКУ

ERROR 1: Translating source or target SRS failed:
'+proj=sinu

мне кажется, что gdalwarp не видит ведущую ' как кавычку, когда она идет от $(), но печатает нормально с просто эхом.

Есть ли решение заставить $() создавать строку, которая не будет останавливаться после '+proj=sinu

or

Есть ли какое-либо решение, чтобы заставить $() создавать всю строку, которую можно передать в gdalwarp?

Я уже пробовал printf, а не эхо

#!/bin/bash -c ' ...... ' _

но я думаю это $()


person el_selvaje    schedule 24.06.2013    source источник
comment
Для этого нет хорошего решения.   -  person Ignacio Vazquez-Abrams    schedule 25.06.2013
comment
См. BashFAQ #50: Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу! Вы не используете переменную, но применяются многие из тех же принципов.   -  person Gordon Davisson    schedule 25.06.2013


Ответы (1)


Проблема в том, что bash должен анализировать командную строку и решать, где разбить командную строку на разные слова, которые затем передаются в $0 (в вашем случае $0 — это «gdalwarp»).

Проблема в том, что некоторые из ваших аргументов командной строки предоставляются другой программой, вызываемой внутри конструкции $( ).

Bash пытается разобрать вывод $() и делает ошибку в интерпретации одинарных кавычек.

Вы можете все исправить, поставив «eval» перед «gdalwarp», например:

eval gdalwarp -overwrite $(./align_v1.1 reference.tif -te -tr -t_srs) input.tif output.tif
person Mark Pettit    schedule 25.06.2013