Я использую оболочку mingw/msys в 64-битной Windows и ниже моя сессия.

USER@FX8300 ~
$ echo $WD
C:\Users\USER\Desktop\msys\\bin\

USER@FX8300 ~
$ echo $WD | sed -e 's/\\bin\\//; s/\\/\//g'
C:/Users/USER/Desktop/msys/

USER@FX8300 ~
$ export W32BASE=`echo $WD | sed -e 's/\\bin\\//; s/\\/\//g'`
sed: -e expression #1, char 14: unknown option to `s'

Теперь я удивляюсь, почему комбо echo/sed не работает в кавычках, в то время как оно работает отлично, когда выдается один?

1 ответ1

0

Подстановка команд может быть выполнена с помощью обратных кавычек, которые вы используете, или $().

От ссылки на bash:

Когда используется форма замещения в старом стиле, обратная косая черта сохраняет свое буквальное значение, за исключением случаев, когда следуют '$', '`' или '\'. Первая обратная кавычка, которой не предшествует обратная косая черта, завершает подстановку команды. При использовании формы $(команда) все символы в скобках составляют команду; никто не лечится специально.

Источник: https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html.

В вашем примере вы избегаете второй косой черты, которая нарушает вашу команду (в дополнение к несоответствию вашей строки).

Если вы хотите продолжить использовать обратные пометки, ваша команда должна быть:

 W32BASE=`echo $WD | sed 's/\\\\bin\\\\//g;s/\\\\/\\//g'`

Когда вы используете $(), обратная косая черта обрабатывается так, как вы обычно ожидаете, и ваша команда будет выглядеть так:

 W32BASE=$(echo $WD | sed 's/\\bin\\//g;s/\\/\//g')

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .