zshスクリプトで配列の長さを見つける

zshスクリプトで配列の長さを見つける

*いくつかの変数を増やすためにforループを使わずにzshで配列(ファイル名)の長さを見つける方法はありますか?

無邪気に試しましたが、echo ${#*[@]} 成功しませんでした。 (bash構文も歓迎します)

ベストアンサー1

${#*[@]}位置引数の配列であるor$*とも呼ばれる配列の長さです(スクリプトまたは関数の場合、これはスクリプトまたは関数が受け取る引数です)。むしろそれを使用したいのですが。$@$argv$#

*単独ではグローバルモードに過ぎません。リストコンテキストでは、パターンに一致する現在のディレクトリのファイルのリストに展開されます。すべての文字列に一致するパターンで、*現在のディレクトリのすべてのファイル名に展開されます(例外隠されたそれら)。

今一つを見つける必要がありますリストコンテキストそれを拡張し*、何とか結果の引数の数を計算します。 1つの方法は、匿名関数を使用することです。

() {echo There are $# non hidden files in the current directory} *(N)

**(N)私はwhich isを使用していませんが(nullglobの場合)、ワイルドカード修飾子を*使用して、Nパターンが*どのファイルとも一致しない場合は、エラーを報告せずに任意のものに拡張するようにします。

次に、拡張を*(N)匿名関数に渡します。その匿名関数では、ファイルリストは$@/配列で使用でき、$argvその配列の長さを使用できます$#$#argvまたは同じ厄介なksh構文を使用することも$#@できます)。$#*${#argv[@]}

おすすめ記事