ksh aspas duplas e variáveis

0

São problemas de KSH.

Eu tenho encontrado alguns problemas com variáveis e aspas hoje. Ordem não importa, embora eu não possa ler os scripts, mas apenas executá-lo.

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

Resultados:

Harvey Lo laugh at Rebecca Won

mas se eu tentar colocá-lo em um arquivo de script ksh, ele não funciona:

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh ${SOMEVAR}

Resultados:

Error: No. of ARGS > 3

Eu até experimento o seguinte, mas ainda não trabalho.

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh 'echo ${SOMEVAR}'

Resultados:

Error: No. of ARGS > 3

alguém pode ajudar, tudo o que sei é que existe algum java dentro do SomeScripts.sh, a função real tem mais de 20 parâmetros, mas eu simplifiquei como mostrado.

O arquivo de ajuda original:

SomeScripts.sh First=Harvey,Third=Rebecca,Second=laugh
Harvey laugh Rebecca
    
por Journeyman Geek 24.10.2013 / 13:56

1 resposta

1

Você precisa perceber que seu primeiro exemplo tem apenas um parâmetro, e a maneira como é citado é apenas um detalhe. Estes são idênticos:

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

SomeScripts.sh "First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

Portanto, a maneira de fazê-lo funcionar é não para colocar \" dentro da variável - em vez disso, você precisa citá-lo enquanto está sendo definido:

SOMEVAR="First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

Mais uma vez, isso é equivalente a um simples

SOMEVAR="First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

Você também precisa citar a variável quando ela é usada, caso contrário, ela estará sujeita à divisão de palavras depois de ser expandida. (A divisão de palavras aqui significa apenas a divisão por espaços.) O mesmo se aplica à substituição ' ' .

SomeScripts.sh "$SOMEVAR"

Tente compilar este programa e executá-lo com argumentos diferentes - ele mostrará exatamente o que ele recebe como argumentos.

#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    for (argc=0; argv[argc]; argc++)
        printf("argv[%d] = %s\n", argc, argv[argc]);
    return 0;
}
    
por 24.10.2013 / 14:04

Tags