Bash は配列の長さとオフセットを取得します。

Bash は配列の長さとオフセットを取得します。

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)を提供します。

おすすめ記事