separador examples comando columnas campos unix getopt

unix - examples - awk separador de campos



¿Cómo hacer un parámetro de múltiples caracteres en UNIX usando getopt? (3)

Estoy tratando de hacer un comando getopt tal que cuando pase el parámetro "-ab" a un script, ese script tratará a -ab como un solo parámetro.

#!/bin/sh args=`getopt "ab":fc:d $*` set -- $args for i in $args do case "$i" in -ab) shift;echo "You typed ab $1.";shift;; -c) shift;echo "You typed a c $1";shift;; esac done

Sin embargo, esto no parece funcionar. ¿Alguien puede ofrecer alguna ayuda?


Estuve luchando con esto por mucho tiempo, luego comencé a leer sobre getopt y getopts

Opciones de un solo char y opciones largas.

Tenía un requisito similar donde necesitaba tener varios argumentos de entrada multichar.

así que, se me ocurrió esto - funcionó en mi caso - espero que esto te ayude

function show_help { echo "usage: $BASH_SOURCE --input1 <input1> --input2 <input2> --input3 <input3>" echo " --input1 - is input 1 ." echo " --input2 - is input 2 ." echo " --input3 - is input 3 ." } # Read command line options ARGUMENT_LIST=( "input1" "input2" "input3" ) # read arguments opts=$(getopt / --longoptions "$(printf "%s:," "${ARGUMENT_LIST[@]}")" / --name "$(basename "$0")" / --options "" / -- "$@" ) echo $opts eval set --$opts while true; do case "$1" in h) show_help exit 0 ;; --input1) shift empId=$1 ;; --input2) shift fromDate=$1 ;; --input3) shift toDate=$1 ;; --) shift break ;; esac shift done

Nota: he agregado la función de ayuda según mis requisitos, puede eliminarla si no es necesario


getopt no soporta lo que buscas. Puede usar una sola letra ( -a ) o opciones largas ( --long ). Algo como -ab se trata de la misma forma que -ab : como opción a con argumento b . Tenga en cuenta que las opciones largas están prefijadas por dos guiones.


getopt soporta formato largo. Puede buscar SO para tales examples . Ver here , por ejemplo