如何預覽命令的變數替換?

如何預覽命令的變數替換?
u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE

我想輕鬆地(例如,如果可能的話,不要轉義)列印結果命令而不是執行它。

是否有任何內建工具可以在 bash 這樣的預設 Linux shell 中進行此類測試?

答案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=

請注意使用者名稱周圍缺少的引號。對於任何包含空格的未加引號的變量,您都會遇到相同的問題。

相關內容