在 Bash 中将 -e 和 -n 作为位置参数传递
Passing -e and -n as positional parameters in Bash
我最近一直在处理一些 bash 脚本中的位置参数,我注意到 -e 和 -n 似乎没有作为位置参数传递。我一直在搜索文档,但无法弄清楚原因。考虑以下短脚本:
#!/bin/bash
# test.sh
echo $@
echo
echo
echo
echo
echo
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' ""
printf '%s\n' ""
printf '%s\n' ""
printf '%s\n' ""
printf '%s\n' ""
输出:
-e
-f
-c
-n
-g
勾选help echo | less +/-e
您可以使用:
echo -- ""
也是
另一个解决方案
使用 bash 此处文档
#!/bin/bash
cat<<EOF
EOF
我最近一直在处理一些 bash 脚本中的位置参数,我注意到 -e 和 -n 似乎没有作为位置参数传递。我一直在搜索文档,但无法弄清楚原因。考虑以下短脚本:
#!/bin/bash
# test.sh
echo $@
echo
echo
echo
echo
echo
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' ""
printf '%s\n' ""
printf '%s\n' ""
printf '%s\n' ""
printf '%s\n' ""
输出:
-e
-f
-c
-n
-g
勾选help echo | less +/-e
您可以使用:
echo -- ""
也是
另一个解决方案
使用 bash 此处文档
#!/bin/bash
cat<<EOF
EOF