关于linux循环while无法输出$@的值

问题遇到的现象和发生背景

编写shell脚本,想通过while循环输出$@的值,但总是报”模糊的重定向“,请问写法有什么不对吗?
(使用for循环没问题)

用代码块功能插入代码,请勿粘贴截图
#!/bin/bash
while read n
do
    echo $n
done < $@

运行结果及报错内容

执行:bash c.sh aa bb

c.sh:行9: $@: 模糊的重定向

我想要达到的结果

请教下我的写法有什么问题吗?

另外while输出$*的时候,会出现如下结果,为什么最后会加上“没有那个文件或目录”。望指点!


$@是参数列表,因此,应该使用for循环而不是while条件循环,正确的代码如下;

#!/bin/bash
#! authon  zsk
for i in "$@"
do
echo $i
done

此脚本执行的例子如下:

[root@node3 ~]# bash test.sh dsf dsfdsfds dfds  1 2 3
dsf
dsfdsfds
dfds
1
2
3


上面的例子是随意输入的几个参数,for循环会按顺序打印参数。你写的while循环是读取某个文件,read函数了嘛,参数列表不是文件,自然是没有那个文件或者目录。
请采纳。