Оболочка видит разбор содержимого $SEDCMD
.Если вы используете это из сценария оболочки, включая Makefile, вы всегда должны защищать все ваши расширенные переменные двойными кавычками.Двойные кавычки заставят переменную интерполяцию, но защитят любой метасимвол оболочки от дальнейшей интерпретации.
sed -e "$SEDCMD" "$FILTER" > "$TEMPFILTER"
Я предполагаю, что $FILTER
и $TEMPFILTER
являются именами файлов?Я тоже процитировал их, на случай, если они содержат злые вещи, такие как пробел или другие метасимволы оболочки;странно, да, но это, как известно, случалось.Регулярно запускайте rename 's/\s+/_/g'
для имен файлов, чтобы очистить их от пробелов, но для других вам придется использовать более осторожный подход;например, что делать со звездами, со знаками вопроса, со скобками и скобками и т. д.
Если вы добавите -x
и / или -v
в командную строку оболочки, вы получите некоторую отладку трассировки, котораяЯ думаю, вероятно, показал бы, где вы пошли не так здесь.