analisando getopts

1

Eu quero escapar da primeira string SOMETEXT no getopts args. Mas só posso fazer isso no primeiro exemplo.

Como posso fazer isso funcionar no segundo exemplo?

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

echo "The result is  $result "

Exemplo 1:

run_test.ksh -p3 SOMETEXT
The result is  3

Exemplo 2:

run_test.ksh SOMETEXT -p3
./run_test.ksh: line 10: result: parameter not set
    
por Topas 08.12.2016 / 12:55

1 resposta

1

Esta é uma consequência do uso de getopts . Parâmetros e seus argumentos devem vir antes de qualquer outro texto.

Se você sabe que a primeira palavra é SOMETEXT , pode retirá-la da lista de argumentos que getopts processa:

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 "
    
por 08.12.2016 / 13:03

Tags