在Bash中传递-e和-n作为位置参数

在Bash中传递-e和-n作为位置参数,bash,shell,parameters,positional-parameter,Bash,Shell,Parameters,Positional Parameter,我最近在一些bash脚本中使用位置参数,我注意到-e和-n似乎没有作为位置参数传递。我一直在搜索文档,但没有找到原因。考虑下面的短脚本: #!/bin/bash # test.sh echo $@ echo $1 echo $2 echo $3 echo $4 echo $5 exit 运行命令:#./test.sh-e-f-c-n-g输出: -f -c -n -g -f -c -g -f -c -e -g-f -c -g ./test.sh-n-f-c-e-g输出: -f -c -n

我最近在一些bash脚本中使用位置参数,我注意到-e和-n似乎没有作为位置参数传递。我一直在搜索文档,但没有找到原因。考虑下面的短脚本:

#!/bin/bash
# test.sh
echo $@
echo $1
echo $2
echo $3
echo $4
echo $5
exit
运行命令:#./test.sh-e-f-c-n-g输出:

-f -c -n -g

-f
-c
-g
-f -c -e -g-f
-c

-g
./test.sh-n-f-c-e-g输出:

-f -c -n -g

-f
-c
-g
-f -c -e -g-f
-c

-g

为什么-e和-n不出现在“$@”中-e显示为空参数,而-n显示为删除以下端点。此外,我注意到这些参数是在回显$#时考虑的。有人知道为什么-e和-n的行为不同于任何其他参数。

-e
作为参数传递给
echo
,然后由它来计算

请尝试以下方法:

#!/bin/bash
printf '%s\n' "$1"
printf '%s\n' "$2"
printf '%s\n' "$3"
printf '%s\n' "$4"
printf '%s\n' "$5"
输出: 检查
help echo | less+/-e

您可以使用:

echo -- "$1"

另一个解决方案 使用bash-here文档

#/bin/bash

c使用
printf“%s\n”
而不是
echo
.Hmm的另一个原因。(一个针对这类问题的参考问题)目前不包括这个案例,但应该包括。这是有意义的,因为-e和-n都是回音选项。有没有一种简单的方法可以在不使用管道的情况下卸下前导的
--