Las comillas en los script bash

Impactos: 10130

En esta cuarta entrega del curso de Scripting Linux usando Bash vamos a hablaros de los diferentes tipos de comillas (doble, simple, acento grave) , según la que utilicemos el Shell realiza una interpretación u otra del contenido que encierran dentro

“date”

‘date’

`date`

Comillas simples

El contenido se interpreta de forma literal.

SALUDO='Hola $USER, que tal?'
echo $SALUDO

No produce el resultado esperado Hola jose, que tal?

Comillas dobles

Interpreta las referencias a variable, las explosiona, poniendo en su lugar su contenido:

SALUDO="Hola $USER, que tal?"
echo "$SALUDO tu directorio de trabajo es $HOME"

El resultado será algo parecido a Hola jose, que tal? tu directorio de trabajo es /home/jose

Acento grave → sustitución de orden

La sustitución de orden permite usar la salida de una orden para asignarla a una variable y tratarla, por ejemplo.

Hay dos formas de utilizarla, una de ellas es encerrando la orden con el acento grave:

  1. `orden`
  2. $(orden)

Bash realiza la expansión ejecutando la orden y reemplazando con la salida estándar de la ejecución misma.

En este ejemplo, alimentamos 2 variables con el resultado de ejecutar 2 comandos:

HOY=`date`
DIR=`pwd`

Si usáis echo para ver su contenido:

echo $HOY $DIR
dom abr 19 09:54:09 CEST 2015 /home/jose

Y esto es todo, os animo a seguir probando  todo lo que hemos visto hasta ahora, en las cuatro entregas que llevamos, en un script de tipo RETO,

RETO: Script que reciba cómo parámetros 3 números, compruebe si realmente le han pasado 3 parámetros, en caso afirmativo que devuelva el resultado de la suma de esos tres números, y en caso negativo informe al usuario del uso correcto del script. Sería conveniente y lo dejamos como plus, que comprobase que los parámetros son realmente números.

Ejemplo de ejecución correcta:

./reto.sh 2 2 2
 

 

6

Ejemplo de ejecución incorrecta:

./reto.sh a b
 

 

Uso: ./reto.sh numero1 numero2 numero3

[< Variable de entorno Path ]

5 comentarios

  • Pingback: Variable de entorno PATH | SOSpedia punto net

  • Maximiliano Lara Prieto

    Me encuentro con una duda, tengo una variable que contiene caracteres especiales como $ y quero que sea parte de una instruccion sed, pero al parecer algo sale mal ya que no logro hacer la sustitucion de cadenas con sed.

    Ej.
    a=’1$2$3$4′
    b=hola

    tengo un archivo que contiene:
    $1$2$3$4 mundo

    y quiero remplazar la cadena 1$2$3$4 por hola quedando el archivo con el siguiente contenido:
    hola mundo

    para ello realizo la intruccion sed

    sed -i "s@$a@$b@g" archivo

    sin embargo no realiza la sustitucion, pienso que tal vez hay que especificar de algun modo que el contenido de la variable $a lo tome como una cadena y descarte los caracteres especiales.

    • Hola Maximiliano, yo acabo de probar lo que dices y salvo un pequeño error funciona:
      Comando sed
      Estoy usando la versión sed (GNU sed) 4.2.2
      El error es que en el archivo sobra un $ delante del 1, por eso “escupe$hola mundo, pero la sustitución funciona.
      ¿Qué distribución estás usando? Imagino que el Shell que usas es el Bash.
      Por si te sirve de ayuda, dado que el carácter $ tiene su significado en las expresiones regulares (final de línea), prueba a escaparlo usando el carácter \, por ejemplo \$
      Prueba por ejemplo a definir la variable a así:
      a='1\$2\$3\$4'
      y después:
      sed "s/$a/$b/g" archivo
      Yo utilizo la barra / y no la arroba @

  • Pingback: Bonus Pack 2018: Recopilación de artículos de sospedia.net – jblanco.org

  • Pingback: Bonus Pack 2018: Recopilación de artículos de sospedia.net – Jose Blanco Vega

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.