Как поддерживать как короткие, так и длинные варианты в то же время в bash? Я хочу поддерживать как короткие, так и длинные параметры в сценариях bash, поэтому можно: $ foo -ax --long-key val -b -y SOME FILE NAMES Возможно ли это? Ответ 1 getopt поддерживает длинные параметры. http://man7.org/linux/man-pages/man1/getopt.1.html Вот пример использования ваших аргументов: #!/bin/bash OPTS=`getopt -o axby -l long-key: -- "[email protected]"` if [ $? != 0 ] then exit 1 fi eval set -- "$OPTS" while true ; do case "$1" in -a) echo "Got a"; shift;; -b) echo "Got b"; shift;; -x) echo "Got x"; shift;; -y) echo "Got y"; shift;; --long-key) echo "Got long-key, arg: $2"; shift 2;; --) shift; break;; esac done echo "Args:" for arg do echo $arg done Вывод $ foo -ax --long-key val -b -y SOME FILE NAMES: Got a Got x Got long-key, arg: val Got b Got y Args: SOME FILE NAMES
Ответ 1 getopt поддерживает длинные параметры. http://man7.org/linux/man-pages/man1/getopt.1.html Вот пример использования ваших аргументов: #!/bin/bash OPTS=`getopt -o axby -l long-key: -- "[email protected]"` if [ $? != 0 ] then exit 1 fi eval set -- "$OPTS" while true ; do case "$1" in -a) echo "Got a"; shift;; -b) echo "Got b"; shift;; -x) echo "Got x"; shift;; -y) echo "Got y"; shift;; --long-key) echo "Got long-key, arg: $2"; shift 2;; --) shift; break;; esac done echo "Args:" for arg do echo $arg done Вывод $ foo -ax --long-key val -b -y SOME FILE NAMES: Got a Got x Got long-key, arg: val Got b Got y Args: SOME FILE NAMES