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

标签 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 的行为与任何其他参数不同。

最佳答案

-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

检查帮助回显|减去+/-e

您可以使用:

echo -- "$1"

也是

另一种解决方案

使用 bash 此处文档

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

关于bash - 在 Bash 中传递 -e 和 -n 作为位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52451497/

相关文章:

bash - 在awk中转换日期格式,行包含2个日期和一个ip

bash - 在 make clean 上使用通配符时如何修复 Makefile 语法错误?

python - 新窗口中的控制台

function - 将 DateTime 作为参数传递

javascript - 如何在 Joomla 模块后端加载 Javascript 调用?

linux - 带有 -i 选项的 sed 命令在 Mac 上失败,但在 Linux 上有效

c++ - 如何将 'ls'(或任何其他 shell 命令)的输出重定向到管道?

linux - AWK如何将命令的输出放入变量

linux - 递归删除所有包含特定字符串的名为 NET_Connections* 的文件

java - JSR168 portlet 请求在 # 符号后删除参数值