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

时间:2018-09-21 21:59:06

标签: 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

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

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

-g

为什么-e和-n不出现在“ $ @”中? -e似乎是作为空参数传递的,而-n似乎是删除以下末尾的行。此外,我注意到在回显$#时考虑了这些参数。有谁知道为什么-e和-n的行为不同于其他任何参数。

1 个答案:

答案 0 :(得分:3)

-e像参数一样传递给echo,然后由其消耗。

尝试以下方法:

#!/bin/bash
printf '%s\n' "$1"
printf '%s\n' "$2"
printf '%s\n' "$3"
printf '%s\n' "$4"
printf '%s\n' "$5"

输出:

-e
-f
-c
-n
-g

选中help echo | less +/-e

您可以使用:

echo -- "$1"

另一种解决方案

使用bash 此处文档

#!/bin/bash
cat<<EOF
$1
$2
$3
$4
$5
EOF