Como concatenar corretamente strings no script shells?

1

Eu tenho um shell bash que eu preciso modificar, e eu tenho que definir uma variável em um script e depois chamar outro script. Minha variável, EXTRA_JAVA_OPTIONS deve ser

-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1"

Então o que eu fiz é

export EXTRA_JAVA_OPTIONS="-javaagent:myagent.jar=\"-d 0 -i 1000 -l log2 -c log1 \""

Então eu chamo meu script e dentro do meu script há o seguinte:

"$JAVACMD" "$EXTRA_JAVA_OPTIONS"

No entanto, isso não produzirá o resultado que desejo. Correndo bash -x eu posso ver que

+ /usr/java/jdk1.6.0_38/bin/java '-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1"'

Se pelo contrário eu fizer:

"$JAVACMD" $EXTRA_JAVA_OPTIONS

Eu tenho uma versão diferente da saída, o que também está errado

+ /usr/java/jdk1.6.0_38/bin/java '-javaagent:myagent.jar="-d' 0 -i 1000 -l log2 -c 'log1"'

Como evito que ' apareça ao imprimir minhas strings ou elas sejam adicionadas pelo shell?

    
por Edmondo1984 11.01.2013 / 16:55

2 respostas

3

As aspas são apenas para impedir a divisão por palavra. Mas você já tem citações em torno da coisa toda.

export EXTRA_JAVA_OPTIONS="-javaagent:myagent.jar=-d 0 -i 1000 -l log2 -c log1"
    
por 11.01.2013 / 17:10
3

Usar uma matriz é uma maneira segura de manter seus argumentos contendo espaços em branco intactos:

EXTRA_JAVA_OPTIONS=(-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1")
"$JAVACMD" "${EXTRA_JAVA_OPTIONS[@]}"
    
por 11.01.2013 / 17:38