web-dev-qa-db-fra.com

Pourquoi $ {1 [@]} non valide, même si {Stringvar [@]} fonctionne autrement?

function HelloWorld()
{
var1=$1
echo ${var1[@]}

echo $1
echo ${1[@]}

}

HelloWorld "Hello World"

echo ${var1[@]} fonctionnera sans problèmes mais echo ${1[@]} me donne une mauvaise substitution. ' Je ne comprends pas la différence entre ces deux cmds si var1 est le même que $1?

2
Brandon W

${array[@]} est la syntaxe qui n'a que significatif pour les tableaux; Une chaîne ordinaire peut agir comme une gamme de longueur 1, mais cette syntaxe n'est pas implémentée pour les paramètres de position car il n'y a aucune raison pour que ce soit: car un paramètre de position ne peut pas être un tableau, il n'y a pas de sens valide et utile possible "${1[@]}" aurait pu se distinguer de la signification de "$1" ou "${1}".

Être parsimonieux avec des extensions de syntaxe quitte la syntaxe actuellement non valide disponible pour les extensions futures pour donner un sens à; Si BASH avait défini des significations pour toutes les syntaxes possibles, il n'y aurait aucun moyen de mettre en œuvre de nouvelles extensions sans casser la compatibilité en arrière. C'est donc une bonne conception de la langue[1] Pour éviter de définir la syntaxe qui n'a aucune utilisation valide.

[1] - Trois mots sont rarement utilisés dans cet ordre de se référer à Bash!

3
Charles Duffy