ksh - pasando parámetro con el espacio
-
02-10-2019 - |
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,
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