Problème avec la longueur du tableau dans le script bash

J'écris un script qui stocke certains des arguments de la command line sous forme de tableau, et utilise le tableau plus tard, mais j'ai des problèmes pour get la bonne longueur du tableau dans le script.

Dans le terminal, en utilisant bash, j'ai essayé ceci:

$:>array=( 1 2 3 4 ) $:>echo array = ${array[*]} and length = ${#array[*]}

et la sortie de l'écho est:

array = 1 2 3 4 and length = 4

Ce qui fonctionne correctement. J'ai simplifié le script avec lequel j'avais un problème et le script est censé faire exactement la même chose, mais j'ai une longueur de tableau de 1. Le script est comme suit ..

#!/bin/bash list=${@} echo array = ${list[*]} and length = ${#list[*]}

Et si j'appelle le script du terminal avec

$:>./script.sh ${test[*]}

la sortie est

array = 1 2 3 4 and length = 1

J'ai essayé quelques manières différentes d'save le tableau, et de l'imprimer, mais je n'arrive pas à comprendre comment résoudre ce problème. Toutes les solutions seraient appréciées!

Vous écrasez l'input en une seule valeur.

Tu devrais faire

 list=("${@}") 

pour maintenir le tableau et le potentiel des espaces dans les arguments.

Si vous manquez le " then quelque chose comme ./script.sh "ab" 2 3 4 returnnera une longueur de 5 parce que le premier argument sera séparé.

 $ cat x #!/bin/bash list=("${@}") echo array = ${list[*]} and length = ${#list[*]} $ ./x "ab" 2 3 4 array = ab 2 3 4 and length = 4