Как просмотреть подстановки переменных для команды?

Как просмотреть подстановки переменных для команды?
u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE

Мне бы хотелось легко (например, без экранирования, если это возможно) распечатать полученную команду вместо ее выполнения.

Есть ли встроенная возможность проведения такого рода тестирования в стандартных оболочках Linux, таких как bash?

решение1

Чтобы обработать общий случай, вам придется заключить переменные в кавычки и сохранить команду в виде массива:

$ 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 

Чтобы запустить массив команд:

"${command[@]}"

echoВыполнение команды работает в некоторых очень простых случаях:

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

Это самое простое решение, но оно показывает вам правильный вывод только в том случае, если расширения не содержат специальных символов, таких как пробелы (в частности, пробел, табуляция или новая строка) или экранированные символы. Например:

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

Обратите внимание на отсутствующие кавычки вокруг имени пользователя. У вас будет та же проблема с любыми переменными без кавычек, содержащими пробелы.

Связанный контент