Каталог статей
предисловие
Это небольшая проблема.Основная причина заключается в том, что для определения равенства символов в среде ==
необходимо bash
, а Ubuntu по умолчанию не является средой оболочки, поэтому будет проблема, что оболочка, которая хорошо работает на CentOS будет работать некорректно на Ubuntu.Суть проблемы, с которой я столкнулся, также является причиной, но в сложной ситуации я не могу понять, где причина, на первый взгляд.
Живая реставрация
Для того, чтобы выяснить причину этой проблемы, я убрал всю неактуальную логику, и появилось следующее a.sh
и b.sh
два скрипта:
#!/bin/bash
VAL=$1
sh ./b.sh $VAL
#!/bin/bash
VAL=$1
if [ $VAL == "1" ] ; then
echo "find it"
fi
echo "end"
Учитывая проблему совместимости, я написал это в начале #!/bin/bash
, пусть он выполняется bash по умолчанию, чтобы у меня все было хорошо, независимо от того, нахожусь ли я на Ununtu или на других версиях Linux, но это не так.Результаты выполнения следующее:
root@demo:~# ./a.sh fly
./b.sh: 5: [: fly: unexpected operator
end
Если у вас есть острый глаз, вы можете увидеть это с первого взгляда.Проблема заключается в sh ./b.sh $VAL
этом предложении, которое делает не#!/bin/bash
работает.Сценарий , выполняемый этой оболочкой, поэтому использование, чтобы судить о том, что строки равны, сообщит об ошибке.sh
b.sh
==
В данном примере это легко найти, а вот в сложных скриптах в реальной работе найти сложнее.Прочитав отчёт об ошибке, ./b.sh: 5
я не проблем, так как обнаружил, что это может быть вызвано синтаксисом оболочки под Система Ubuntu. Я также пробовал много раз. Я изменил его на один знак равенства в первый раз, и другие методы сравнения строк все еще сообщали об ошибках, но когда я обнаружил проблему, я смог заставить ее выполняться правильно независимо от один знак равенства или два знака равенства, просто успокойся
Подведем итог
- Использование
==
для определения равенства строк - этоbash
синтаксис в - Символ в начале сценария оболочки
#!/bin/bash
означает, что если тип оболочки не указан при выполнении сценария, он будет выполнен с указанной оболочкой. - Когда вы сталкиваетесь с проблемой, вам нужно успокоиться и решать ее медленно, избегая хаоса в спешке.
Некоторые люди истощили всю свою энергию, чтобы выжить, так на что еще им положиться в борьбе с судьбой~