在将参数传递到脚本之前,引号已被删除,因此保留它们为时已晚。您可以做的是在将参数传递给内部命令时保留其效果,并重建等效的带引号/转义版本的参数以进行打印。
为了将参数传递给内部命令
"$@"-使用双引号,$ @保留原始的换行符,这意味着内部命令接收的脚本列表与脚本完全相同。
对于打印,可以在bash的printf命令中使用%q格式来重建报价。请注意,这并不总是重建原始的引用,而是会构造一个 等效的带
引号/转义的字符串。例如,如果您传递了参数,则该参数
'uptime ; uname -a'可能会打印
uptime ; uname-a或
"uptime ; uname -a"其他等效参数(有关类似示例,请参见@William Pursell的答案)。
这是使用这些的示例:
printf "Running command:"printf " %q" innercmd "$@" # note the space before %q -- this inserts spaces between argumentsprintf "n"innercmd "$@"



