我的shell脚本中有一个接受选项的函数。它工作得很好,直到我尝试传递'-n'选项,然后函数无法读取参数。
func ()
{
for arg in "$@"
do
echo $arg
done
}
func -p #works
func -e #works
func -n #doesn't work, func cannot read arg
有人知道为什么会发生这种情况吗?
已尝试:向函数传递多个选项,它们都有效,除了'-n'。期望:在我的函数中读取'-n'作为参数
-n
可能被解释为echo
命令的选项。为了避免这种情况,使用printf
代替:
printf '%sn' "$arg"
您将参数传递给echo
的方式使它们被认为是echo
的开关,并且由于-n
是一个有效的开关(顺便说一句,-e
也是我的echo
上的有效开关,您将幸运地在这里使用-p
)。没有得到回应。如果您想使用echo打印它们,您可以尝试添加--
来表示参数的结束,因此$arg
不会被解释为(echo -- $arg
),但这也可能取决于您正在使用的shell。
编辑:由于对--
的支持不是默认的,你可能想用printf
代替echo
:
printf "%sn" "${arg}"