web-dev-qa-db-ja.com

シェルで配列の長さを見つける方法は?

UNIXシェルで配列の長さを見つける方法は?

57
Arunachalam
$$ a=(1 2 3 4)
$$ echo ${#a[@]}
4
70
ghostdog74

Bashを想定:

~> declare -a foo
~> foo[0]="foo"
~> foo[1]="bar"
~> foo[2]="baz"
~> echo ${#foo[*]}
3

そう、 ${#ARRAY[*]}は、配列ARRAYの長さに拡張されます。

16
unwind

Bashから 手動

$ {#parameter}

パラメーターの拡張値の文字の長さが置き換えられます。パラメーターが「」または「@」の場合、置換される値は位置パラメーターの数です。パラメーターが「」または「@」で添え字化された配列名である場合、置換される値は配列内の要素の数です。パラメータが負の数字で添字付けされたインデックス付き配列名である場合、その番号はパラメータの最大インデックスよりも大きいものと比較して解釈されるため、負のインデックスは配列の末尾からカウントバックし、-1のインデックスは最後を参照します素子。

文字列、配列、および連想配列の長さ

string="0123456789"                   # create a string of 10 characters
array=(0 1 2 3 4 5 6 7 8 9)           # create an indexed array of 10 elements
declare -A hash
hash=([one]=1 [two]=2 [three]=3)      # create an associative array of 3 elements
echo "string length is: ${#string}"   # length of string
echo "array length is: ${#array[@]}"  # length of array using @ as the index
echo "array length is: ${#array[*]}"  # length of array using * as the index
echo "hash length is: ${#hash[@]}"    # length of array using @ as the index
echo "hash length is: ${#hash[*]}"    # length of array using * as the index

出力:

string length is: 10
array length is: 10
array length is: 10
hash length is: 3
hash length is: 3

$@、引数配列:

set arg1 arg2 "arg 3"
args_copy=("$@")
echo "number of args is: $#"
echo "number of args is: ${#@}"
echo "args_copy length is: ${#args_copy[@]}"

出力:

number of args is: 3
number of args is: 3
args_copy length is: 3
14
codeforester

tcshまたはcshの場合:

~> set a = ( 1 2 3 4 5 )
~> echo $#a
5
7
Rahul Mahajan

Fish Shell では、配列の長さは次のようにして見つけることができます:

$ set a 1 2 3 4
$ count $a
4
4
harm

これは私にとってうまくいく

    arglen=$#
    argparam=$*
    if [ $arglen -eq '3' ];
    then
            echo Valid Number of arguments
            echo "Arguments are $*"
    else
            echo only four arguments are allowed
    fi
2
Mansur Ali