¿Cómo obtener una vista previa de las sustituciones de variables para un comando?

¿Cómo obtener una vista previa de las sustituciones de variables para un comando?
u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE

Me gustaría imprimir fácilmente (por ejemplo, sin escapar si es posible) el comando resultante en lugar de ejecutarlo.

¿Existe alguna función incorporada para realizar este tipo de pruebas en shells de Linux predeterminados como bash?

Respuesta1

Para manejar el caso general hay que citar variables y almacenar el comando como una matriz:

$ USER='foo bar' DATABASE='baz ban'
$ command=(u2api --zuser="$USER" --outfmtput=json SQL create_database name="$DATABASE")
$ printf '%q ' "${command[@]}"; echo # To get a newline at the end
u2api --zuser=foo\ bar --outfmtput=json SQL create_database name=baz\ ban 

Para ejecutar la matriz de comandos:

"${command[@]}"

echoEjecutar el comando funciona en algunos casos muy simples:

echo u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE

Esta es la solución más simple, pero solo muestra el resultado correcto si las expansiones no contienen caracteres especiales como espacios en blanco (espacio, tabulación o nueva línea, específicamente) o caracteres de escape. Por ejemplo:

$ USER='foo bar'
$ echo u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE
u2api --zuser=foo bar --outfmtput=json SQL create_database name=

Tenga en cuenta las comillas que faltan alrededor del nombre de usuario. Tendrá el mismo problema con cualquier variable sin comillas que contenga espacios en blanco.

información relacionada