如何删除","在shell循环结束?

时间:2017-03-11 16:07:06

标签: linux shell unix

我是shell脚本语言的新手

我尝试写这个循环

for ((i=100; i>0; i--));
do
echo -n "\" Hello $i \" , ";
done

将显示结果

  

"你好100" ,"你好99" ,..."你好1" ,<<

但在文字末尾有","

如何改进我的代码以删除它。

谢谢

4 个答案:

答案 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} - 从1001

的数字范围

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, -

具有相同的输出