每当我尝试执行以下shell命令时,它都能正常工作。
convert maanavulu_GIST-TLOTKrishna.tif -alpha set -matte -virtual-pixel transparent -set option:distort:viewport 1000x1000 -distort perspective-projection '1.06,0.5,0,0,1.2,0,0,0' -trim 1.jpg
但是,每当我尝试将命令分配给变量然后执行它时,它会报告以下错误。
convert.im6: invalid argument for option PerspectiveProjection : 'Needs 8 coefficient values' @ error/distort.c/GenerateCoefficients/873.
答案 0 :(得分:3)
缺点:它最好:
eval
解决方案)# Store options in array - note that the filenames are excluded here, too,
# for modularity
opts=(-alpha set -matte -virtual-pixel transparent -set option:distort:viewport \
1000x1000 -distort perspective-projection '1.06,0.5,0,0,1.2,0,0,0' -trim)
# Invoke command with filenames and saved options
convert maanavulu_GIST-TLOTKrishna.tif "${opts[@]}" 1.jpg
事后补充:正如@konsolebox和@chepner所指出的那样:使用函数可能是最好的选择(固定和可变部分之间的明确分离,封装,全方位的shell命令可用)。
答案 1 :(得分:1)
分配和执行命令的正确方法是使用数组:
COMMAND=(convert maanavulu_GIST-TLOTKrishna.tif -alpha set -matte -virtual-pixel transparent -set option:distort:viewport 1000x1000 -distort perspective-projection '1.06,0.5,0,0,1.2,0,0,0' -trim 1.jpg)
然后执行它:
"${COMMAND[@]}"
我喜欢eval
,但这次绝对不是解决方案。
只是一个提示:如果你可以使用一个功能,请使用一个功能。并正确引用你的论点。
答案 2 :(得分:0)
扩展变量后不会处理引号。唯一出现的处理是分词和通配符扩展。如果需要执行命令执行的所有常规步骤,则必须使用eval
:
eval "$variable"