使用“$@”时脚本无法识别 Bash“-n”参数

use*_*959 2 bash echo

我正在使用一个 bash 脚本,它需要命令行参数,前面有一个破折号,后跟一个文件名:

./script -abc file_name
Run Code Online (Sandbox Code Playgroud)

在脚本中,我尝试使用以下命令打印出脚本的所有参数:

echo "$@"

显示:

-abc file_name
Run Code Online (Sandbox Code Playgroud)

这是预期的。除了我单独使用字母“n”时,一切都打印得很好,即:

./script -n file_name

脚本中生成的 echo 语句只打印出file_name参数,根本不打印“-n”参数。此行为仅发生在字母“n”本身。当我用任何其他字母尝试“-nx”或“n”时,echo 语句打印得很好......

为什么这个 echo 语句本身不能与“-n”一起使用?

jeb*_*jeb 5

-n或者-e是有效的选项echo命令。

因此它被 echo 命令消耗,并且只显示剩余的文本。
这是一个已知问题,echo为了避免这种情况,您可以使用printf.

printf "%s\n" "$@"
Run Code Online (Sandbox Code Playgroud)