Использование getopts и ${1} вместе
Я пытаюсь написать скрипт, который может использовать опции ${1} и getopts одновременно. Я хотел бы, чтобы он работал с использованием строки использования:
./test_script test -a
печатать:
test
-a was triggered!
я пробовал
echo ${1};
while getopts "c:a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
Который не может дать мне доступ к обоим ${1} и обнаружить, что опция -a использовалась одновременно. Есть ли способ использовать оба из них? Я хотел бы избежать превращения тестовой строки в другую опцию getopts.
1 ответ
Вы можете использовать сдвиг при выходе из getopts. Например:
while [ $# -gt 0 ] ; do
while getopts "c:a" opt ; do
case $opt in
# YOUR OPTIONS
esac
done
OTHER_VALUE=$1
shift
done
PS: обычно я не использую getopts, но я предпочитаю анализировать аргументы самостоятельно следующим образом:
while [ $# -gt 0 ] ; do
case "$1" in
'-a' | '--along' )
echo '-a was triggered' ;;
'-b' | '--blong' )
echo '-b was trigger with arg ' $2 ;
shift ;; # One extra shift for the argumnent $2
* )
echo 'Unknown value (maybe test)' ;;
esac
shift
done