парсинг getopts

Я хочу избежать первой строки SOMETEXT в аргументах getopts . Но я могу сделать это только в первом примере.

Как я могу заставить его работать во втором примере?

 while getopts p: opt do case $opt in p) result=$OPTARG;; esac done echo "The result is $result " 

Пример 1:

 run_test.ksh -p3 SOMETEXT The result is 3 

Пример 2:

 run_test.ksh SOMETEXT -p3 ./run_test.ksh: line 10: result: parameter not set 

Это следствие использования getopts . Параметры и их аргументы должны присутствовать перед любым другим текстом.

Если вы знаете, что первым словом является SOMETEXT вы можете удалить его из списка аргументов, который обрабатывает процессы:

 if [[ 'SOMETEXT' == "$1" ]] then echo "Found SOMETEXT at the beginning of the line" shift fi while getopts p: opt do case $opt in p) result=$OPTARG;; esac done echo "The result is $result "