
He adaptado un código que tenía para manejar solo una opción posible. Ejecute la función o utilice la opción de ayuda para dar una breve descripción.
activate-jet ()
{
local iarg=0 narg="$#"
while (( narg > 0 )); do
opt="$1" ; iarg=$(( iarg + 1 ))
case $opt in
("-h"|"--help") echo "TODO" ; return ;;
(*) break ;;
esac
done
}
Me gustaría simplificarlo más si puedo, sin introducir ningún comportamiento extraño por parte del usuario cuando sea llamado.
Respuesta1
Esta es una posibilidad, ya que usted afirma quesolo necesitasunoargumento, por lo tanto, no hay necesidad de realizar bucles o "casing":
$ activate_jet() {
[[ "$#" -gt 1 ]] && echo "Invalid number of arguments" && return
if [[ ! -z "$1" ]]; then
if [[ "$1" = "-h" || "$1" = "--help" ]]; then
echo "TODO" && return
else
echo "Bad argument" && return
fi
fi
echo "jet activated"
}
$ activate_jet foo bar
Invalid number of arguments
$ activate_jet foo
Bad argument
$ activate_jet -h
TODO
$ activate_jet --help
TODO
$ activate_jet
jet activated
Ahora note que cambié el nombre de la función reemplazando el guión por un guión bajo: activate_jet
en lugar de activate-jet
, porque el guiónPuede que no sea compatible con algunas carcasas.:
Conclusiones
- Los guiones no son estándar. Manténgase alejado de ellos si desea compatibilidad entre shells.
- Utilice guiones bajos en lugar de guiones: los guiones bajos se aceptan en todas partes.