2

我有一个有点复杂的问题,我希望我能够清楚地表达出来。

我有一个 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'来自 时,它并没有将前导视为引号 $(),但它仅使用 echo 就可以很好地打印。

是否有任何解决方案可以强制$()产生一个不会停止的字符串'+proj=sinu

或者

是否有任何解决方案可以强制$()生成可以传递给 gdalwarp 的整个字符串?

我已经尝试过 printf 而不是 echo

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

但我认为是$()

4

1 回答 1

2

问题是 bash 必须解析命令行,并决定在哪里将命令行分成不同的单词,然后将其提供给 $0(在您的情况下,$0 是“gdalwarp”)。

问题是你的一些命令行参数是由另一个程序提供的,在 $( ) 结构中被调用。

Bash 试图解析 $( ) 的输出,并在解释单引号的方式上犯了一个错误。

您可以通过将“eval”放在“gdalwarp”前面来修复整个问题,如下所示:

eval gdalwarp -overwrite $(./align_v1.1 reference.tif -te -tr -t_srs) input.tif output.tif
于 2013-06-25T00:49:34.013 回答