2

我最近一直在使用一些 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 的行为与任何其他参数不同。

4

1 回答 1

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
于 2018-09-21T22:01:31.347 回答