Что такое 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