bourne shell-comilla simple, comillas dobles y pregunta backquote
Pregunta
/! Bin / sh
if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy dody"
fi
echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'
En primer lugar, si la condición no se ejecutará, im supongo que es debido a la oferta inadecuada, pero no puedo entenderlo.
Gracias de antemano por cualquier ayuda.
Solución
Si estás usando Bash, lo recomiendo $(...)
en lugar de copias de las cotizaciones. ¿Qué mensajes de error se puede conseguir? Mi conjetura es que la opción -F","
a awk no está siendo citado correctamente. Tratando de insertar \
para escapar de las comillas.
Otros consejos
También puede utilizar comillas simples alrededor del argumento de la opción -F
y cuando tenga alrededor de otros argumentos:
if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then
Es mucho más fácil escribir su examen si usted lo envuelve en una función:
mytest()
{
echo "$1 $2" \
| awk -F"," -v arg3="$3" '{print arg3}' \
| awk -F" " -v arg1="$1" '{print arg1}' \
| sed '/^$/d'
}
De esta manera, se puede comprobar que funciona correctamente. Una vez que ganó esta confianza
if [ "$(mytest "$desc" "$status")" != "OK" ]; then
echo "howdy doody"
fi
o
if mytest "$desc" "$status" | grep -q -v '^OK$'; then
echo "howdy doody"
fi
A primera vista, es posible que desee para tratar de escapar de algunas de las comillas dobles:
if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy dody"
fi
a
if [ "`echo $desc $status | awk -F\",\" '{print $3}' | awk -F\" \" '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy doody"
fi
Escapar de las comillas dobles es ciertamente una buena idea, pero parece que los $ 3 y $ 1 están destinados a ser interpretados por awk. Ellos están siendo interpretados por la shell en su lugar. Es posible que desee escapar de los '$' s. (Es posible que usted tiene valores significativos para $ 1 y $ 3 en la cáscara, pero no es probable.)