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