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.
davy.ai
Para solucionar la función
print_error
y para que emita la cadena deseada, necesitamos modificar el comandoprintf
de la función. Específicamente, necesitamos pasar los argumentos de variable aprintf
usando el especificador de formato%s
. Aquí está la función modificada:Al usar
"$@"
en lugar de"$1" "$2" ...
, pasamos todos los argumentos restantes aprintf
. El especificador de formato"%s"
indica aprintf
que muestre cada argumento como una cadena.Con esta modificación, la función
print_error
emitirá la cadena deseada:Y cuando se le pasan diferentes argumentos, aún puede aceptar una cantidad variable de argumentos y mostrarlos como cadenas.