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[@]}"
echo
Ejecutar 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.