gpt4 book ai didi

bash - 在变量中准备命令行参数

转载 作者:行者123 更新时间:2023-11-29 09:21:27 26 4
gpt4 key购买 nike

我需要使用 ImageMagick 生成一些图像。出于这个原因,我在实际调用 convert 之前准备了变量中的绘制操作,看起来像这样

convert -size 160x160 xc:skyblue \
-fill 'rgb(200, 176, 104)' \
$draw_operations \
$0.png

$draw_operations 包含像这样的线条

-draw 'point 30,50' \
-draw 'point 31,50'

调用 convert 的结果总是

non-conforming drawing primitive definition `point` ...
unable to open image `'30,50'' ...
...

如果我使用带双引号的$draw_operations(这是必需的,如果它包含多行)错误是

unrecognized option `-draw 'point 30,50' '

最后,如果我简单地按原样放置 -draw 'point 30,50',就没有错误。所以它与 ImageMagick 无关,而是与 bash 替换变量的方式有关。

最佳答案

参见 BashFAQ 50: I'm trying to put a command in a variable, but the complex cases always fail! .问题是 shell 在扩展变量之前解析引号和转义,因此将引号放在变量的值中是行不通的——当引号“在那里”时,它们已经来不及做任何事情了。

在这种情况下,在我看来最好的解决方案是将参数存储在一个数组中,然后使用 "${array[@]}"(包括双引号) 将它们添加到命令中。像这样:

draw_operations=(-draw 'point 30,50' -draw 'point 31,50')
# Note that this creates an array with 4 elements, "-draw", "point 30,50", "-draw", and "point 31,50"

convert -size 160x160 xc:skyblue \
-fill 'rgb(200, 176, 104)' \
"${draw_operations[@]}" \
"$0.png"

您还可以增量构建数组,如下所示:

draw_operations=()    # Start with an empty array
draw_operations+=(-draw 'point 30,50') # Add two elements
draw_operations+=(-draw 'point 31,50') # Add two more elements
...

关于bash - 在变量中准备命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31047688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com