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.