エコー変数から最後の文字を削除

エコー変数から最後の文字を削除

スクリプトが正常に動作し、5つ増やすように修正しました。私の問題は、最後に最後のコンマが必要なく、それを削除する方法がわからないということです。

for ((i=1, j=0; i <= 12 ; i++, j=j+5))
do
 echo -n "$j,"
done

ベストアンサー1

GNUや他のシステムでは、この特定の問題には次のものを使用してください。seq:

seq -s, 0 5 55

これは、コンマで区切られた0から55までのシーケンスを提供します。


問題が例で提案されているよりも少し複雑な場合に役立ついくつかの純粋なbashオプションがあります。最も標準的なアプローチは、明示的なテストを使用して最後の反復であることを確認することです。

for ((i=1, j=0; i <= 12 ; i++, j=j+5))
do
 echo -n "$j"
 [ $i -lt 12 ] && echo -n ,
done

ここでは、毎回timeを印刷し、$jコンマを印刷する前に12より小さいかどうかをテストします$i(つまり、最後の反復ではありません)。

別のアプローチは、出力全体を単一の文字列として記述することです。

for ((i=1, j=0; i <= 12 ; i++, j=j+5))
do
 ACCUM="$ACCUM$j,"
done
echo "${ACCUM%,}"

ここではすでに印刷したものと同じ内容を保持しますACCUMが、ループ自体では何も出力しません。以下を使用して末尾のカンマを削除できます${ACCUM%,}次に展開ACCUMの終わりに一致する項目はすべて切り捨て,られます。

それでも、そのseqオプションがあなたのユースケースに適している場合は、私はそれを選択します。

おすすめ記事