Я использую getopts для разбора аргументов в скриптах bash как
while getopts ":hd:" opt; do
case $opt in
d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
exeparams="$*"
exeparams
будет содержать любые непарсированные параметры / аргументы. Поскольку я хочу использовать exeparams для хранения параметров для команды, выполняемой в сценарии (которая может перекрываться с собственными параметрами сценария), я хочу использовать - для завершения параметров, передаваемых сценарию. Если я прохожу, например,
myscript -d myscriptparam -- -d internalparam
exeparams
будет держать
-- -d internalparam
Теперь я хочу удалить ведущий, --
чтобы передать эти аргументы внутренней команде. Есть ли элегантный способ сделать это, или я могу получить строку, которая содержит только остаток --
от getopts?
shift; OPTIND=1
вgetopts
цикл, вероятно, не лучший способ сделать это. Это работает только в вашем случае, потому что у вас есть только 2 варианта, а во всех остальных вы просто выходите из скрипта. В противном случае вам понадобитсяshift; OPTIND=1
каждая опция, что означает дублирование кода (плохая практика). Просто сделайтеshift $((OPTIND - 1))
сразу после окончания цикла - это самый обычный способ и, вероятно, самый эффективный.