我正在使用 GRASS,并且我对一维数字向量有疑问。现在,我想打印该向量的长度,因为我的输出如下所示:
(1,2,3,4,5,6,7,8,9,)当它应该看起来像这样时:
(1,2,3,4,5,6,7,8,9)即,我不需要最后一个分隔符。有没有办法做到这一点?
我想要符合 POSIX 标准的解决方案;没有羞辱。
我的代码如下所示:
for i in $CATS
do
step=$step"$i,"
echo $step
g.region --overwrite vector="region_uspo_$i," save=regions_uspo
regions_uspos="region_$i,"
echo $regions_uspos
done
答案1
构建完字符串后删除最后一个逗号。
for …
done
step=${step%,}
regions_uspos=${regions_uspos%,}
${VARIABLE%PATTERM}
扩展为 的值VARIABLE
并删除最短后缀匹配PATTERN}
。每个 POSIX shell 都支持此构造。所有 BusyBox 配置也都支持它。
如果您需要不带尾随逗号的中间字符串,则可以去掉循环内的尾随逗号。或者,通过在附加元素之前添加逗号来构建不带尾随逗号的字符串。为了避免出现初始逗号,请检测循环中的第一次迭代。
first=1
for … do
if [ -n "$first" ]; then
first=
else
step="$step,"
regions_uspos="$regions_uspos,"
fi
step="$step$i"
…
done
答案2
有很多方法可以做到这一点。一种方法是创建一个新变量,例如 sep,它最初是空的,并在您说之后设置为逗号step="$step$sep$i"
。
另一种方法是使用条件扩展,所以你说
step="${step+${step},}$i"
如果设置了 name,则 ${name+value} 将扩展为 value。在本例中,假设我在手机上正确输入了该值,则该值为“$step”。
另一种方法是在将值累积到变量中后删除变量中的第一个逗号。
答案3
是的,显然答案如下:
for i in $var
do
step=$step"region_$i,"
done
step=${step%,}
echo $step
regions_uspos=${regions_uspos%,}
这是基于 @Gilles 的回答