Pregunta

Estoy tratando de pasar un parámetro con un espacio en ksh través de variables.

Aquí hay un código de ejemplo para demostrar el problema. Como verá el parámetro con el espacio se maneja más tarde como dos variables -. No lo que busco

* Actualización - No copiar y pegar todo el código en la cuestión del origianl. **

El contenido de param_test.sh

#!/bin/ksh

echo "check 1"

param_string=${1}
param_string2=${2}

echo "check 2"

echo param_string = $param_string
echo param_string2 = $param_string2

echo "check 3"

El contenido de call_param_test.sh

#!/bin/ksh

param_test.sh 'a b' c

CMD="param_test.sh 'a b' c"

# CMD=param_test.sh
# CMD="${CMD} 'a b c'"


echo CMD is  $CMD

echo now running CMD
${CMD}

echo back to calling script

echo at end


Results of executing call_param_test.sh

check 1
check 2
param_string = a b
param_string2 = c
check 3
CMD is param_test.sh 'a b' c
now running CMD
check 1
check 2
param_string = 'a
param_string2 = b'
check 3
back to calling script
at end

Gracias,

¿Fue útil?

Solución

BashFAQ / 050 es aplicable. En general, usted debe tratar de evitar poner en comandos variables. Si debe hacerlo, entonces una matriz es probablemente el camino a seguir:

# create an array
CMD=(param_test.sh 'a b' c)
# execute the command contained in the array
${CMD[@]}

Otros consejos

Me cambió el guión llamar algo como esto

#param_test.sh 'a b' c

#CMD="./param_test.sh \'a b\' c"
CMD="./param_test.sh"
ARGS1="a b"
ARGS2=c

# CMD=param_test.sh
# CMD="${CMD} 'a b c'"


echo CMD is  $CMD  $ARGS

echo now running CMD
#${CMD}
#${CMD} "$ARGS1" ${ARGS2}

echo back to calling script

echo at end

Dado que los argumentos tienen espacios es bastante complicado para dar su argumento como (espero que sea mejor manera shuld). Sin embargo, lo anterior funciona a pesar de que no es un método eficaz

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top