Это очень хорошо, может быть глупость с моей стороны. Я хотел бы принять ответы Да / Нет, Правда / Ложь в моем скрипте Bash:
test.sh
#!/bin/bash
ARGUMENT=$1
echo User passed in $ARGUMENT
OPTARG=${ARGUMENT:0:1}
if [[ "$OPTARG" -eq 0 ]] || [[ "${OPTARG^^}" == "N" ]]; then
echo Decline
elif [[ "$OPTARG" -eq 1 ]] || [[ "${OPTARG^^}" == "Y" ]]; then
echo Accept
else
echo Invalid argument
fi
Вот некоторые примеры результатов:
./test.sh 0
User passed in 0
Decline
./test.sh 1
User passed in 1
Accept
./test.sh 2
User passed in 2
Invalid argument
./test.sh Нет
User passed in No
Decline
Теперь тупик. Почему [[ "${OPTARG^^}" == "N" ]]
возвращается true для любой строки !?
./test.sh Да
User passed in Yes
Decline
./test.sh ThisShouldNotMatch
User passed in ThisShouldNotMatch
Decline
Ответы:
Эта:
Будет соответствовать любой строке, если только это не цифры. Использование:
Вместо.
источник
Несмотря на то, что проблема в коде была хорошо объяснено с помощью Златовласки , я не могу сопротивляться сказать , что ваш код без необходимости долго. Вы могли бы сильно упростить это.
Следующее эквивалентно вашему желаемому коду:
Вы можете также обратиться к Условным конструкциям в руководстве .
источник
Также вы можете использовать
case
источник