Мне нужно запустить довольно странно выглядящую командную строку на нескольких Windows системах, и я ожидаю, что смогу использовать ту же самую на Windows 7 с Git для Windows (GfW) или Windows 10 с Ubuntu 18.04, работающим в Windows Подсистема для Linux (WSL).
Командная строка , естественно, не , показанная здесь, но принцип заключается в одни и те же. Мне нужно использовать awk из командной строки Windows, мне нужно вызвать awk из bash, чтобы иметь возможность повторно использовать одну и ту же командную строку как в WSL, так и в GfW, и мне нужно сделать весь вызов из одного и тот же сеанс командной строки.
Вкл. Windows 10 с Ubuntu 18.04, работающим в подсистеме Windows для Linux:
cmd /c "echo Something strange is going on |bash -c "awk '{ print $1 }'""
Something strange is going on
Теперь что-то заставило awk упустить $ 1 переменная. Мне нужно экранировать знак доллара:
>cmd /c "echo Something strange is going on |bash -c "awk '{ print \$1 }'""
Something
Это выглядит лучше, было выведено только первое слово!
Теперь то же самое на Windows 7 с Git для Windows:
>cmd /c "echo Something strange is going on |bash -c "awk '{ print \$1 }'""
awk: cmd. line:1: { print \$1 }
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: { print \$1 }
awk: cmd. line:1: ^ syntax error
Подождите, что ?! Я не могу использовать backsla sh, чтобы избежать знака доллара! Что с этим? Мне нужно удалить его:
>cmd /c "echo Something strange is going on |bash -c "awk '{ print $1 }'""
Something
Что я здесь не так делаю? Почему мне нужно по-разному экранировать одну и ту же командную строку в зависимости от того, выполняется ли она на Win7 / GfW или Win10 / WSL? Я также пытался экранировать командную строку с помощью ^, но, насколько я могу судить, знак доллара не должен требовать такого особого внимания для использования с cmd.exe?