Shell脚本-为什么将“-n”传递给函数不起作用[duplicate]

jgovgodb  于 2022-11-30  发布在  Shell
关注(0)|答案(2)|浏览(127)

此问题在此处已有答案

Bash: echo string that starts with "-"(4个答案)
4天前关闭。
我在我的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'作为参数。

lymgl2op

lymgl2op1#

-n可能被解释为echo命令的选项。要避免此问题,请使用use printf instead

printf '%s\n' "$arg"
9lowa7mx

9lowa7mx2#

将参数传递给echo的方式使它们被视为echo的开关,并且由于-n是有效的开关(顺便说一句,-e也是我的echo上的有效开关,如果你在这里只使用-p,你会很幸运)。没有被回显。如果你想用回显打印它们,你可以尝试添加--来表示参数的结束,因此$arg不会被解释为(echo -- $arg),但这也可能取决于您使用的shell。
编辑:由于对--的支持不是默认的,您可能需要将echo替换为printf

printf "%s\n" "${arg}"

相关问题