Getopt принимать специальные символы в качестве значений - PullRequest
0 голосов
/ 15 апреля 2020

Getopts не принимает специальные символы в качестве значений, что является лучшим вариантом для принятия специальных символов в качестве входных данных для значений. когда я передаю нормальные значения, вывод выводится на печать, но при попытке передать специальные символы вывод игнорируется.

optspec=":hv-:"
while getopts "$optspec" optchar; do

    case "${optchar}" in
        -)
            case "${OPTARG}" in
                SPUN=*)
                    SPUN=${OPTARG##*=}
                    ;;
                SPPWD=*)
                    SPPWD=${OPTARG##*=}
                    ;;
                SPTENT=*)
                    SPTENT=${OPTARG##*=}
                    ;;
                SECURITY_PROTOCOL=*)
                    SECURITY_PROTOCOL=${OPTARG##*=}
                    ;;
                SSL_TRUSTSTORE_LOCATION=*)
                    SSL_TRUSTSTORE_LOCATION=${OPTARG##*=}
                    ;;
                SSL_TRUSTSTORE_PASSWORD=*)
                    SSL_TRUSTSTORE_PASSWORD=${OPTARG##*=}
                    ;;
                INITIALIZE=*)
                    INITIALIZE=${OPTARG##*=}
                    ;;
                *)
                    echo "Unknown option --${OPTARG}" >&2
                    exit 1
                    ;;
            esac;;
        h)
            print_usage
            exit
            ;;
        v)
            echo "Parsing option: '-${optchar}'" >&2
            ;;
        *)
            if [ "$OPTERR" != 1 ] || [ "${optspec:0:1}" = ":" ]; then
                echo "Non-option argument: '-${OPTARG}'" >&2
            fi
            ;;
    esac
done

echo ++ USERNAME: $SPUN
echo ++ "<><><>< $INITIALIZE"
echo ++ "$SPTENT"
echo ++ PWD: $SPPWD

deploy.sh --SPUN=sujithsujtih --SPPWD=sujithpwd= --INITIALIZE=test --SPTENT=beating
++ USERNAME: sujithsujtih
++ <><><>< test
++ beating
++ PWD:

deploy.sh --SPUN=sujithsujtih --SPPWD=I+RFzwpXm13Jn==@k2B0R*@7Xw8e5@.a --INITIALIZE=test --SPTENT=beating
++ USERNAME: sujithsujtih
++ <><><>< test
++ beating
++ PWD: @k2B0R*@7Xw8e5@.a

1 Ответ

0 голосов
/ 15 апреля 2020

AFIK, нет никаких ограничений на то, какие символы вы можете передавать в качестве опций (за исключением, возможно, символа NUL). Я не знаю, что вы подразумеваете под особыми символами, но будьте осторожны с тем, что делает вызывающая оболочка с вводом, до того, как getopt сможет его увидеть, и как вы будете использовать значение после этого , Например, когда вы делаете в своем коде

--SPPWD=I+RFzwpXm13Jn==@k2B0R*@7Xw8e5@.a

, это небезопасно, потому что оболочка будет пытаться расширить глобальный символ *. В - по общему признанию маловероятном - случае, когда существует имя файла, совпадающее с этой строкой, ваша программа увидит это расширенное имя файла вместо звездочки. Следовательно, вам лучше написать это как

--SPPWD="I+RFzwpXm13Jn==@k2B0R*@7Xw8e5@.a"

или

"--SPPWD=I+RFzwpXm13Jn==@k2B0R*@7Xw8e5@.a"

То же самое относится к использованию проанализированных опций. Когда вы делаете, как в вашем коде, расширение

echo ++ PWD: $SPPWD

может иметь место подстановки для содержимого SPPWD, и вам лучше написать

echo "++ PWD: $SPPWD"

Но это общее принцип с bash -программированием и не имеет отношения к getopt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...