Sustituir command como variable en script bash

Necesito sustituir una parte de un command awk en un script con diferentes casos, a partir de esto:

 CONTAINER=$1 RESULTS=$(ssh -o LogLevel=QUIET -t -i ~/key.pem user@server sudo docker stats --no-stream $CONTAINER | awk '{if (NR!=1) {print substr($2, 1, length($2)-1)}}') 

a esto:

 #!/bin/bash CONTAINER=$1 TYPE=$2 case "${TYPE}" in cpu) AWK="'{if (NR!=1) {print substr($2, 1, length($2)-1)}}'" ;; esac RESULTS=$(ssh -o LogLevel=QUIET -t -i ~/key.pem user@server sudo docker stats --no-stream $CONTAINER | awk $AWK) 

Pero siempre obtengo un error de syntax.

En una statement de variable, cualquier cosa (que no sea parámetro / command / expansión aritmética) dentro " se trata literalmente, por lo que cuando lo hace:

 var="'foobar'" 

$var se expandirá a 'foobar' , no a foobar .

Así que tú necesitas:

 AWK='{if (NR!=1) {print substr($2, 1, length($2)-1)}}' 

como no necesita ninguna expansión previa por shell, es mejor usar comillas simples para mantenerse en el lado más seguro. Si utiliza comillas dobles, entonces, por ejemplo, el shell expandirá $2 antes como expansión de parameters, esto es cierto para cualquier otro token que sea especial para shell.

Y no olvides citar $AWK cuando lo usas para deshabilitar el operador split + glob:

 … | awk "$AWK"