необходимо попробовать sed
вместо этого
sed 's/\.//g'
В bash нет ошибки: код работает так, как должен работать.
bash позволяет использовать многострочные строки в качестве аргументов для echo
, даже если эти строки выглядят странно и содержат то, что в противном случае было бы кодом bash.
Обратите внимание, что ниже приведен просто один оператор echo
с многострочной строкой для вывода:
/bin/echo "HERE IS MISTAKE WITHOUT QUOTE IN THE END
exit
fi
/bin/echo " BLACK HOLE "
/bin/echo " CODE WILL NEVER PROCEED "
if [ 0 -eq 1 ]; then
/bin/echo "SECOND MISTAKE
Чтобы пояснить, давайте заменим эту длинную строку на "многострочная строка опущена"
. Тогда код будет выглядеть просто:
/bin/echo "Silent Err 'unexpected EOF while looking for matching' Example:"
if [ 0 -eq 1 ]; then
/bin/echo "multiline string omitted"
exit
fi
/bin/echo "normal code... will work";
/bin/echo "Good and silent exit without any notice about BLACK HOLE code..."
/bin/echo "exit."
Приведенный выше код является правильно работающим.
Я не уверен, что означает "основа этого поведения", но как я это интерпретирую:
На самом деле (кажущаяся) несопоставленная строка без кавычек "ЗДЕСЬ ОШИБКА БЕЗ КАВЫЧЕК В КОНЦЕ
просто начинает цитируемый строковый литерал. Этот строковый литерал проходит мимо первого fi
и охватывает все до символа двойной кавычки, с которого начинается "ВТОРАЯ ОШИБКА
".
Итак, bash
может разобрать весь этот беспорядок, хотя и неправильно с человеческой точки зрения. Оказывается, поскольку 1 не равна 0, весь блок кода, от /bin/echo "HERE IS MISTAKE
до fi
, следующего за "SECOND MISTAKE
, не выполняется. Таким образом, (кажущаяся) строка SECOND MISTAKE
анализируется правильно, как возможная команда, но bash
никогда не пытается ее выполнить, поэтому мы не видим ошибки SECOND: command not found
или какой-либо другой.
Подведем итог: пропущенные кавычки в двух строках приводят к тому, что bash
разбирает код как "истинный" пункт единственного if-then-fi
, но условие ложно, поэтому bash
никогда не пытается выполнить то, что человеческий глаз видит как плохую команду, и не выдает соответствующей синтаксической ошибки.