Saltar al contenido

Diferencia entre comillas simples y dobles en awk

Solución:

Nunca incluyas ningún guión entre comillas dobles o te estás sentenciando a ti mismo al infierno de barra invertida. Esta es la sintaxis de lo que está intentando hacer:

glb_library="my_library"
awk -v glb_library="$glb_library" '
        /^Direct Dependers of/ { next }
        /^---/                 { next }
        $0 ~ "^"glb_library":" { ver=$0; next }
                               { gsub(/[[:space:]]/, ""); print ver":"$0 }
      ' file

En base a los comentarios anteriores de los expertos de awk y algunas investigaciones, estoy publicando esta respuesta:

  • las cadenas awk se encierran entre comillas dobles, no entre comillas simples; más precisamente: las comillas simples no son delimitadores de cadenas en awk, a diferencia de shell
  • awk no otorga un significado especial a las comillas simples y deben encerrarse entre comillas dobles si se usan en cadenas literales
  • es mejor usar comillas simples para envolver declaraciones awk en la línea de comando, a diferencia del código de OP que usa comillas dobles (Ed señaló esto claramente)

Más aclaraciones:

  • "" es la cadena nula en awk, no ''
  • para usar comillas simples en un literal de cadena awk, enciérrelas entre comillas dobles, como en "Ed's answers are great!"
  • Otras técnicas que se siguen al manejar comillas simples en awk son:

    a) usa una variable, como en awk -v q="'" '{ print q }' ...

    b) usar notación octal o hexadecimal, como en awk '{ print "47"$0"47" }' ...


Documentación relevante aquí.

Un resumen pragmático:

  • Como recomienda sensatamente la útil respuesta de Ed Morton:
    Siempre usa soltero citas para adjuntar su awk guión como un todo ('...'), lo que garantiza que no haya confusión sobre lo que cascarón interpreta en la delantera, y qué awk termina viendo.

  • Para definir cadenas dentro un awk texto, siempre usar doble citas ("...").

    • " es el único delimitador de cadena awk reconoce.
    • "..." las cadenas son no interpolando (no puede incrustar referencias de variables), pero reconocen secuencias de caracteres de control tal como n y t.
  • Una sola cita (') no tiene sintáctico significado dentro de un awk texto, pero, – si estás usando '...' para su guión general, como se recomienda – no puedes usar un literal ' dentro de él de todos modos, porque el concha las cadenas entre comillas simples no permiten incorporado ' caracteres.

    • Si tu hacer Necesito usar un literal una frase (') en tus awk texto, tienes tres opciones:

      • Pasar un variable que lo define, y usa awkconcatenación de cadenas de caracteres, basada en literales de cadena directamente contiguos y referencias de variables:
        awk -v q=' 'BEGIN { print "I" q "m good." }' # -> I'm good
      • Utilice un secuencia de escape dentro "..."; para máxima portabilidad y eliminación de ambigüedades, utilice un octal secuencia de escape (47), No un maleficio uno (x27):
        awk 'BEGIN { print "I47m good." }' # -> I'm good
      • Usar ''' (sic) para “escapar” incrustado ' caracteres. (técnicamente, 3 comillas únicas distintas cascarón los literales de cadena se concatenan)Gracias snr:
        awk 'BEGIN { print "I'''m good" }' # -> I'm good
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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