passar argumento de string entre aspas no script sh

1

Eu simplesmente não entendo

linha de comando (works):

$ someprog -flag 'key1=val 1,key2=val 2,key3=val 3'

sh direct (obras):

#!/bin/sh
someprog -flag 'key1=val 1,key2=val 2,key3=val 3'

sh variable (falha):

#!/bin/sh
OPTSTR="'key1=val 1,key2=val 2,key3=val 3'"
someprog -flag "$OPTSTR"      #fails
someprog -flag ${OPTSTR}      #fails
someprog -flag $OPTSTR        #fails
eval "someprog -flag $OPTSTR" #works
    
por zac 20.02.2015 / 08:06

1 resposta

2

Nos dois primeiros exemplos, você cita seu argumento. Essas aspas são vistas apenas pelo seu shell, que trata a string inteira como um único argumento, em vez de dividi-lo nos espaços. As citações em si não são vistas pelo programa.

Ao digitar OPTSTR="'key1=val 1,key2=val 2,key3=val 3'" , o conteúdo de sua variável contém aspas simples e, posteriormente, será dado ao seu programa. Seu programa vê as aspas, não as espera e, portanto, falha.

Use simplesmente:

OPTSTR="key1=val 1,key2=val 2,key3=val 3"
someprog -flag "$OPTSTR"

A diferença entre aspas simples e duplas é se você quer que o seu shell substitua variáveis e coisas assim ou não.

    
por 20.02.2015 / 08:12

Tags