Como visualizar substituições de variáveis ​​para um comando?

Como visualizar substituições de variáveis ​​para um comando?
u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE

Eu gostaria de imprimir facilmente (por exemplo, sem escapar, se possível) o comando resultante em vez de executá-lo.

Existe algum recurso interno para fazer esse tipo de teste em shells padrão do Linux como bash?

Responder1

Para lidar com o caso geral você deve citar variáveis ​​e armazenar o comando como um array:

$ 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 executar a matriz de comando:

"${command[@]}"

echoO comando funciona em alguns casos muito simples:

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

Esta é a solução mais simples, mas só mostra a saída correta se as expansões não contiverem caracteres especiais, como espaço em branco (espaço, tabulação ou nova linha, especificamente) ou caracteres de escape. Por exemplo:

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

Observe as aspas ausentes ao redor do nome de usuário. Você terá o mesmo problema com quaisquer variáveis ​​não citadas que contenham espaços em branco.

informação relacionada