(Sé que esto es una entrada antigua, pero ninguno de las respuestas realmente respondieron la pregunta.)
Utilice la matriz BASH_ARGV. Contiene los argumentos pasados al script de invocación en orden inverso (es decir, es una pila con la parte superior en el índice 0). Es posible que deba activar la depuración extendida en el shebang (por ejemplo, #!/bin/bash -O extdebug
) o con shopt
(por ejemplo, shopt -s extdebug
), pero funciona para mí en bash 4.2_p37 sin que esté activado.
De man bash
:
una variable de matriz que contiene todos los parámetros en la pila fiesta llamada de ejecución actual. El parámetro final de la última llamada de subrutina está en la parte superior de la pila; el primer parámetro de la llamada inicial está en la parte inferior. Cuando se ejecuta una subrutina, los parámetros suministrados se insertan en BASH_ARGV. El shell establece BASH_ARGV solo cuando está en modo de depuración extendida ....
Aquí es una función que utilizo para imprimir todos los argumentos en orden en una sola línea:
# Print the arguments of the calling script, in order.
function get_script_args
{
# Get the number of arguments passed to this script.
# (The BASH_ARGV array does not include $0.)
local n=${#BASH_ARGV[@]}
if (($n > 0))
then
# Get the last index of the args in BASH_ARGV.
local n_index=$(($n - 1))
# Loop through the indexes from largest to smallest.
for i in $(seq ${n_index} -1 0)
do
# Print a space if necessary.
if (($i < $n_index))
then
echo -n ' '
fi
# Print the actual argument.
echo -n "${BASH_ARGV[$i]}"
done
# Print a newline.
echo
fi
}
creo que 'función f() {' no es válido. Deberías usar 'f() {' o 'función f {' en su lugar. – Benoit
He corregido mi respuesta, pero 'function f() {}' me funcionó. – dogbane