Eu tenho um monte de argumentos que eu quero passar para um comando várias vezes. Para diminuir a quantidade de vezes que escrevo os mesmos argumentos e, assim, diminuir o número de lugares onde tenho que manter esses argumentos, imaginei que seria uma boa idéia colocá-los todos em uma string e passar essa string. No entanto, o comando vê a string inteira como um único argumento, o que naturalmente causa problemas.
Aqui está uma amostra de script do que estou tentando alcançar. (Isto é para construir o GDAL, a propósito).
$baseOptions = "MSVC_VER=1910 GDAL_HOME='$outputDir\' SWIG='$swig'"
#Building x86
if($x86 -eq $true)
{
$options = $baseOptions + " BINDIR='$outputDir\x86\bin' LIBDIR='$outputDir\x86\lib' INCDIR='$outputDir\x86\include'"
if($useLibcurl -eq $true)
{
$options += " CURL_DIR='$libcurlDir/x86' CURL_INC='-I$libcurlDir/include' CURL_LIB='$libcurlDir/x86/lib/libcurl.lib wsock32.lib wldap32.lib winmm.lib'"
}
#Building x86 release
if($release -eq $true)
{
nmake /f makefile.vc $options
nmake /f makefile.vc install $options
nmake /f makefile.vc devinstall $options
}
#Repeated for debug...
#Some more use of $options to create C# wrappers...
}
#Repeated for x64...
Apenas para construir a parte nativa do GDAL para lançamento em x86 eu preciso rodar nmake
três vezes. Eu posso não precisar dos mesmos argumentos para cada série de nmake
, mas não está claro quais argumentos são necessários para que executar e manter o controle de que seria apenas uma coisa extra para manter. Bem, repita isso para depurar e, em seguida, liberar e depurar para x64 e, em seguida, algumas vezes para criar wrappers C #.
Se eu não posso modificar uma coleção de argumentos como este eu também teria que duplicar o código para saber se eu quero ou não construir o GDAL com uma dependência no libcurl. A complexidade se tornaria massiva se eu tivesse que adicionar suporte para outras bibliotecas dependentes também.
Eu tentei fazer o comando inteiro em uma string para expandir $options
das seguintes maneiras sem sucesso:
. "nmake /f makefile.vc $options"
& "nmake /f makefile.vc $options"
A string inteira é vista como um comando e não como um comando com argumentos ...
Na verdade, encontrei a resposta enquanto escrevia essa pergunta, mas decidi perguntar de qualquer maneira para ajudar outras pessoas que talvez estivessem procurando uma solução tão freneticamente quanto eu. Ainda vou receber respostas que resolvam o mesmo problema de uma maneira diferente! Talvez aqueles que não confiam nos argumentos coletados em uma única string?
fonte