¿Por qué ${1[@]} es inválido, mientras que ${stringVar[@]} funciona correctamente en otros casos?
function HelloWorld()
{
var1=$1
echo ${var1[@]}
echo $1
echo ${1[@]}
}
HelloWorld "Hello World"
El comando echo ${var1[@]}
se ejecutará sin problemas, pero echo ${1[@]}
me da “bad substitution”. ¿No entiendo la diferencia entre estos dos comandos si var1
es lo mismo que $1
?
davy.ai
En Bash, la variable
$1
se refiere al primer parámetro posicional pasado a un script o función. En el fragmento de código proporcionado, la funciónHelloWorld
toma un parámetro pasado como argumento cuando se llama a la función, que es “Hello World”.Por otro lado,
var1
es una variable que se establece con el valor de$1
dentro de la función. La sintaxis${var1[@]}
se utiliza para expandir el contenido devar1
como un array.La razón por la cual
echo ${1[@]}
produce un error es que la sintaxis${1[@]}
no es válida en Bash. Esto se debe a que$1
no es un array, sino una variable escalar que representa el primer argumento pasado a la función.Por lo tanto, para evitar el error de “substitución incorrecta”, solo puedes usar
${1}
para expandir el valor del primer argumento pasado a la función.En resumen,
var1
y$1
no son exactamente lo mismo, aunque puedan tener el mismo valor. El primero es una variable que se puede manipular y expandir, mientras que el último es un parámetro posicional que no se puede tratar como un array.