Итак, у меня есть скрипт, в котором я хочу обработать опции с getopts
, но я также хочу читать аргументы самой программы обычным способом. Поэтому в этом примере сценария я хочу обработать параметры, а затем echo
аргумент, заданный как ./script.sh -abc theargument
. Проблема, которая возникает, заключается в том, что я не знаю, какой это аргумент оболочки. Аргумент не должен быть связан с параметрами, поэтому вы можете также вызвать скрипт как ./script.sh theargument
:
#!/bin/sh
while getopts "abc" opt; do
case $opt in
a) echo "option a" ;;
b) echo "option b" ;;
c) echo "option c" ;;
esac
done
echo # what?
Я не могу просто shift
аргументы с $OPTIND
, чтобы сделать его $1
, поскольку параметры могут быть заданы как -abc
, -a -b -c
, -ab -c
и т. Д. 1017 *., Поэтому число параметров не соответствует количеству аргументов.
В идеале хочу избежать башизмов