Skip to main content

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.