Что такое cmd/powershell эквивалент обратной галочки на bash?

Перенаправление вывода команды:

например:

echo "Foo `./print_5_As.rb`"

повторил бы "Foo AAAAA"

3 ответа

Синтаксис PowerShell основан на синтаксисе POSIX ksh (и, что интересно, не на каких-либо языках Microsoft, таких как CMD.EXE, VBScript или Visual Basic для приложений), поэтому многие вещи работают почти так же, как в Bash. В вашем случае подстановка команды выполняется с

echo "Foo $(./print_5_As.rb)"

в PowerShell и Bash.

Bash по-прежнему поддерживает древний способ (обратные метки), но PowerShell очистил синтаксис и удалил избыточные конструкции, такие как два разных синтаксиса подстановки команд. Это освобождает обратную косую черту для другого использования в PowerShell: в POSIX ksh обратная косая черта используется в качестве escape-символа, но это было бы очень болезненно в PowerShell, поскольку обратная косая черта является традиционным разделителем компонентов пути в Windows. Таким образом, PowerShell использует (теперь неиспользуемый) backtick для выхода.

В Powershell вы используете $() для оценки подвыражений...

Например:

PS C:\> "Foo $(./print_5_As.rb)"
Foo AAAAA

В CMD.EXE нет прямого эквивалента. Но вы можете использовать команду FOR для достижения того, что вы хотите.

Сделайте что-то вроде следующего:

FOR /F "usebackq" %x IN (`./print_5_As.rb`) DO @echo Foo %x

или же

FOR /F %x IN ('"./print_5_As.rb"') DO @echo Foo %x

Вам может потребоваться установить разделитель на что-то другое, чем значение по умолчанию, в зависимости от того, как выглядит вывод и как вы хотите его использовать. Более подробная информация доступна в документации FOR по адресу https://technet.microsoft.com/en-us/library/bb490909.aspx

Другие вопросы по тегам