es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo escribir una función con un número variable de argumentos que se pasan a printf.

¿Cómo corrijo la función print_error a continuación?

#!/bin/bash

script_name="tmp.bash"

function print_error {
    format="$1"
    shift
    printf "%s: ERROR: $format\n" "$script_name" "$@"
}

print_error "Hoy es %s; mañana es %s" "$(date)" "$(date -d '+1 day')"

para que produzca la siguiente salida:

tmp.bash: ERROR: Hoy es Mon Nov 22 15:10:40 PST 2021; mañana es Tue Nov 23 15:10:50 PST 2021

Actualmente, produce lo siguiente:

tmp.bash: ERROR: Hoy es %s; mañana es %s
Mon Nov 22 15:10:40 PST 2021: ERROR: Tue Nov 23 15:10:50 PST 2021

print_error debería poder aceptar un número variable de argumentos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar la función print_error y para que emita la cadena deseada, necesitamos modificar el comando printf de la función. Específicamente, necesitamos pasar los argumentos de variable a printf usando el especificador de formato %s. Aquí está la función modificada:

    function print_error {
        format="$1"
        shift
        printf "%s: ERROR: $format\n" "$script_name" "$@"
    }
    

    Al usar "$@" en lugar de "$1" "$2" ..., pasamos todos los argumentos restantes a printf. El especificador de formato "%s" indica a printf que muestre cada argumento como una cadena.

    Con esta modificación, la función print_error emitirá la cadena deseada:

    tmp.bash: ERROR: Today is Mon Nov 22 15:10:40 PST 2021; tomorrow is Tue Nov 23 15:10:50 PST 2021
    

    Y cuando se le pasan diferentes argumentos, aún puede aceptar una cantidad variable de argumentos y mostrarlos como cadenas.

Comments are closed.