En la mayoría de casos cuando creamos una función en un bash script y la invocamos desde nuestro “main”, las variables enviadas como argumentos son 1 (una) sola palabra o varias separadas con guiones medios, guiones bajos, puntos, etc. El desarrollo de un script en estos casos sería el siguiente:
#!/bin/bash
#Commands variables
readonly ECHO='/usr/bin/echo'
readonly VAR1='test'
readonly VAR2='by'
readonly VAR3='root view'
#########################################################
# Imprimir variables recibidas desde la funcion "main" #
# Arguments: #
# None #
# Outputs: #
# None #
#########################################################
function print_variables(){
for argument in "$@"; do
$ECHO "Argument: $argument"
done
}
#########################################################
# MAIN FUNC #
#########################################################
print_variables $VAR1 $VAR2 $VAR3
Se obtiene la siguiente salida por pantalla
$ ./test.sh Argument: test Argument: by Argument: root Argument: view
Podemos observar que la variable $VAR1 y $VAR2 se imprimen correctamente (y sus posiciones son $1 y $2 dentro de la función) pero la variable $VAR3 se imprime separada (representando la posición $3 y $4).
Con el fin de lograr que esta variable se imprima como si fuera 1 sola (posición $3) se necesita realizar el “escape” del espacio utilizando Backslash “\”
#!/bin/bash
#Commands variables
readonly ECHO='/usr/bin/echo'
readonly VAR1='test'
readonly VAR2='by'
readonly VAR3='root view'
#########################################################
# Imprimir variables recibidas desde la funcion "main" #
# Arguments: #
# None #
# Outputs: #
# None #
#########################################################
function print_variables(){
for argument in "$@"; do
$ECHO "Argument: $argument"
done
}
#########################################################
# MAIN FUNC #
#########################################################
print_variables $VAR1 $VAR2 "\"$VAR3\""
De esta manera, podemos obtener el resultado esperado:
$ ./test.sh Argument: test Argument: by Argument: root view
El contenido de este artículo esta bajo licencia Creative Commons.

