3

У меня есть сценарий оболочки testShell.sh который использует getopts как показано ниже:

#!/bin/bash
while getopts ":j:e:" option; do
    case "$option" in
        j) MYHOSTNAME=$OPTARG ;;
        e) SCRIPT_PATH=$OPTARG ;;
        *) ;;
    esac
done

echo "j=$MYHOSTNAME"
echo "e=$SCRIPT_PATH"
shift $((OPTIND - 1))
echo "remaining=$@"

Когда я тестирую, запустите его следующим образом:

$ testShell.sh  -jvalue1 -evalue4 -Djvalue3  -pvalue2

Вывод, который я получаю, следующий:

j=value3
e=2
remaining=

Но я хотел бы вывод как:

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

Можно убедиться , что getopts выглядит только на первый пост персонажа - символ? чтобы он не интерпретировал -Djvalue3 как -jvalue3 и -pvalue2 как -e2 .

1 ответ1

1

После публикации на 3 форумах и поиска везде ... в конце концов я попробовал следующее, и это сработало ...

testShell.sh  -jvalue1 -evalue4 -- -Djvalue3  -pvalue2

уведомление

--  

после -evalue4

И выход был

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

Я считаю -- просит getopts прекратить обработку вариантов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .