シェルスクリプトの文字列長

シェルスクリプトの文字列長

私はGRASSを使用していますが、1D数値ベクトルに関する質問があります。今私の出力は次のようになるので、このベクトルの長さを印刷したいと思います。

(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シェルはこの設定をサポートしています。また、すべての BusyBox 構成でもサポートされます。

末尾のコンマなしで中間文字列が必要な場合は、ループ内の末尾のコンマを削除できます。または、要素を追加する前にコンマを追加して、末尾のカンマなしで文字列を作成します。最初のカンマを避けるには、ループ内の最初の反復を検出します。

first=1
for … do
  if [ -n "$first" ]; then
    first=
  else
    step="$step,"
    regions_uspos="$regions_uspos,"
  fi
  step="$step$i"
done

おすすめ記事