Bash muestra comillas simples para mostrar un comando que es una sintaxis de entrada válida. No está ejecutando un comando que contiene estas comillas simples en un parámetro para el sshcomando.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
te dice que los últimos 4 parámetros del comando ssh son "sudo, /home/pi/shared/blink.sh, 27y off".
En el host remoto, el demonio ssh une las palabras de los comandos con espacios como separadores, por lo que el comando remoto que está ejecutando es
"sudo /home/pi/shared/blink.sh 27 off"
Esto intenta ejecutar un comando cuyo nombre es sudo /home/pi/shared/blink.sh 27 off, que por supuesto no existe.
Elimine las comillas dobles de su definición de testvar.
Aquí no importa, pero probablemente importa en su caso real: en lugar de ${testvar}escribir "$testvar"(o "${testvar}"si lo desea, pero los corchetes son opcionales). Siempre ponga comillas dobles alrededor de sustituciones variables a menos que sepa por qué necesita dejarlas fuera. "$testvar"se expande al valor de la variable testvar, mientras que $testvarcuando no está entre comillas dobles trata el valor de testvarcomo una lista separada por espacios en blanco de patrones globales.
Gilles 'SO- deja de ser malvado'
fuente
Shell divide el valor de la variable en palabras. Doble comilla para evitar la división. Ver la diferencia:
fuente