如何安全地回显脚本的所有参数?

How to safely echo all arguments of a script?

我正在编写一个 bash 脚本,该脚本必须回显其所有参数,这出乎意料地难以做到。

天真的实现看起来像这样:

#!/bin/bash
echo "$@"

但是,输入失败,例如:

> ./script.sh -n -e -v -e -r
-v -e -r> 

我怎样才能让它更健壮,这样上面的结果是:

> ./script.sh -n -e -v -e -r
-n -e -v -e -r
> 

这个在开头加了一个space但是很简单:

#!/bin/bash
echo "" "$@"

你也可以使用 printf :

#!/bin/bash
printf "%s\n" "$*"

echo 命令的行为可能因系统而异。最安全的方法是使用 printf:

printf '%s\n' "$*"

根据posix

It is not possible to use echo portably across all POSIX systems unless both -n (as the first argument) and escape sequences are omitted.

The printf utility can be used portably to emulate any of the traditional behaviors of the echo utility ...

使用 printf 代替 echo:

#!/bin/bash

printf "%s " "$@"
printf "\n"