我是shell脚本语言的新手
我尝试写这个循环
for ((i=100; i>0; i--));
do
echo -n "\" Hello $i \" , ";
done
将显示结果
"你好100" ,"你好99" ,..."你好1" ,<<
但在文字末尾有","
如何改进我的代码以删除它。
谢谢
答案 0 :(得分:2)
在项目之前打印分隔符,分隔符最初应为null,然后在第一次迭代后无条件地设置。它明确,易于理解,高效。
sep=
for ((i=100; i>0; i--)); do
echo -n "$sep\" Hello $i \""
sep=" , "
done
根据@CharlesDuffy的建议你可以使用printf(bash builtin)而不是echo -n
sep=
for ((i=100; i>0; i--)); do
printf "$sep\" Hello $i \""
sep=" , "
done
答案 1 :(得分:0)
将commma的echo
与其余部分分开,然后输入if条件以检查最后一次重复...
for ((i=100; i>0; i--));
do
echo -n "\" Hello $i \"";
if ($i!=1) then
echo -n ",";
endif
done
答案 2 :(得分:0)
sed
替换的单行解决方案:
for i in {100..1}; do echo -n "\" Hello $i \" , "; done | sed 's/,\s*$//g'
{100..1}
- 从100
到1
sed 's/,\s*$//g'
- 将使用空字符串
示例范围{10..1}
的输出如下:
" Hello 10 " , " Hello 9 " , " Hello 8 " , " Hello 7 " , " Hello 6 " , " Hello 5 " , " Hello 4 " , " Hello 3 " , " Hello 2 " , " Hello 1 "
答案 3 :(得分:0)
替代(迟到)回答,您不需要删除最后一个,
,但您可以使用paste
命令在没有它的情况下构建输出,例如:
for ((i=10; i>0; i--));
do
printf '"Hello %d"\n' $i;
#or echo "\"Hello $i\""
done | paste -sd, -
输出:
"Hello 10","Hello 9","Hello 8","Hello 7","Hello 6","Hello 5","Hello 4","Hello 3","Hello 2","Hello 1"
或只是:
printf '"Hello %d"\n' {10..1} | paste -sd, -
具有相同的输出