Это происходит потому, что shift
выполняет сдвиг $2
в $1
независимо от того, какой текст у вас есть для падежей. Точная цель вашего сценария неясна, но, например, если вы хотите избежать этого, вы можете сделать что-то вроде:
while [[ "$1" != "" && "$2" != -* ]]; do
case $1 in
-f | --first ) shift
first=$1
;;
-s | --second ) shift
second=$1
;;
* ) break
esac
shift
done
echo "first: "$first" second: "$second
Это позволит избежать манипуляций, если аргумент отсутствует.
Пример вывода:
$./script.sh --first a --second b
first: a second: b
$./script.sh --first --second b
first: second: