Передача аргумента в скрипт K SH с пробелами - PullRequest
0 голосов
/ 03 марта 2020

Мне нужно передать строку слов в скрипт K SH следующим образом

  $ script.sh -p "a b c"

Я ожидаю увидеть следующее

  PARMS a b c 

Но когда я пытаюсь чтобы распечатать значение $ PARMS, печатается только первое слово «a»

    #!/bin/ksh

    ARGS=`getopt p: $*`

    set -- $ARGS

    for i
    do
       case "$i"
       in
        -p)     PARMS=$2; shift; shift;;
        --)     shift; break;;
    esac
    done

    echo "PARMS" "${PARMS}"

1 Ответ

0 голосов
/ 04 марта 2020

Это пример использования getopts в k sh.

#!/bin/ksh

DEFAULT_SITE_NAME="a.b.c.d"

SITE_NAME=$DEFAULT_SITE_NAME

USAGE="[-author?Andre Gelinas]"
USAGE+="[-copyright?2020]"
USAGE+="[+NAME?getopts.sh --- Example of getopts]"
USAGE+="[+DESCRIPTION?Example of getopts usage in ksh.]"
USAGE+="[s:site]:?[site:=$DEFAULT_SITE_NAME?Site name.]"
USAGE+="[p:param]:[param?Parameters to test.]"
USAGE+=$'[+SEE ALSO?\aMAN Page\a(1)]'

while getopts "$USAGE" optchar ; do
    case $optchar in
    p)  PARAM_TO_PRINT=$OPTARG ;;
    s)  SITE_NAME=$OPTARG ;;
    esac
done

print "Paramters [p] : "$PARAM_TO_PRINT
print "Site [s] : "$SITE_NAME

. Он поддерживает короткий (-p) и длинный (--param =) тип опции. Параметр -s приведен только в качестве примера необязательного параметра со значением по умолчанию. Он также поддерживает --help и --man для использования.

Пример:

$ ./getopts.sh --param="a b c" --site=t.t.t.t
Paramters [p] : a b c
Site [s] : t.t.t.t
$ ./getopts.sh -p "a b c"
Paramters [p] : a b c
Site [s] : a.b.c.d
...