我最近在某些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的行为不同于其他任何参数。
答案 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