bashスクリプトを作成していますが、要素から始まる配列の長さを取得する必要があります。
配列が次のようになるとしましょう。
array=(1 2 3 4 5)
次を使用して、オフセット2に配列を印刷できます。
echo ${array[@]:2}
3 4 5
以下を使用して配列の長さを印刷できます。
echo ${#array[@]}
5
オフセット2から配列の長さを印刷しようとしています。
echo ${#array[@]:2}
動作しません。予想される結果は次のとおりです。
3
方法を見つけましたが、これが最善の方法であるかどうかはわかりません。
echo $(( ${#array[@]} - 2 ))
3
これを行う最良の方法はありますか?
ありがとうございます!
答え1
${var:2}
$var
また、部分文字列拡張で値の最初の2文字を削除するように拡張されます。これを念頭に置いて${#array[@]:2}
少し曖昧に見えます。まず、配列から2つの要素を取り出し、次に長さを取得する必要がありますか?それとも、最初に長さを取得し、その数字から最初の2文字を取得する必要がありますか?
後者は間違いなく愚かなことですが、あなたがしたように配列の全長から2を引くことができるので、最初のものも不要です。
とにかくkshはそれをサポートしていません${#array[@]:2}
。 Bashの多くの機能はもともとkshから来たので、Bashがkshをサポートしていない理由かもしれません。一方、Zshはこれを処理して、${#array[@]:2}
配列の長さから2を引いた値(例で予想された3)を提供します。