我正在尝试编写这个简单的脚本,它使用ImageMagick将一堆.png图像转换为动画gif。我的文件名为firstNeighboursDistribution_strength_XXXbosons_13window_YYY.png,其中XXX = {0.0 0.001 0.0025 0.005 0.05 0.1 0.15},YYY = {1,3,5 ...}。以下代码不会在控制台上显示任何消息,它似乎卡住了。怎么了?
#$ -S /bin/bash
LANG=C #Enforce English. Crucial to get decimal *points* (rather than commas)
for f in 0.0 0.001 0.0025 0.005 0.05 0.1 0.15;
do
convert -delay 400 -dispose Background +page firstNeighboursDistribution_strength_$fbosons_13window_*.png -loop 0 Animation_first_neigh_strength_$f.gif;
done
请注意以下代码按预期工作:
convert -delay 400 -dispose Background +page firstNeighboursDistribution_strength_XXXbosons_13window_*.png -loop 0 Animation_first_neigh_strength_$f.gif;
适用于任何合适的XXX。
答案 0 :(得分:3)
您需要在变量名称周围加上大括号。 Bash不会尝试匹配变量,如果它找到一个$
后跟一个有效的变量名,它就会使用它。因此,在您的代码中,Bash假定这是变量名称:
$fbosons_13window_
这是因为$
和*
之间的每个字符都是有效的变量名字符。要解决此问题,您需要使用{
和}
包围变量名称,以告诉bash确切的变量名称,如下所示:
${f}bosons_13window_
循环中的完整代码行是:
convert -delay 400 -dispose Background +page firstNeighboursDistribution_strength_${f}bosons_13window_*.png -loop 0 Animation_first_neigh_strength_$f.gif;
作为旁注,建议您将此变量用作字符串的一部分。大括号可以解决bash脚本中的许多微妙错误。
答案 1 :(得分:2)
这是因为$fSomething
扩展了变量fSomething
; 不 f
并连接Something
。
在变量{}
周围使用大括号f
:
convert -delay 400 -dispose Background +page firstNeighboursDistribution_strength_${f}bosons_13window_*.png -loop 0 Animation_first_neigh_strength_${f}.gif;
答案 2 :(得分:1)
你的f变量应该像${f}bosnos