分页: 1 / 1

求解,shell中如何正确使用$@

发表于 : 2011-04-28 15:34
chengmoYS
脚本 test1.sh 如下,

[speed@localhost ~]$ cat test1.sh
#! /bin/sh

# test1.sh

echo "\$# 传递到脚本的参数的个数为 $#"

echo "\$* 以一个单字符串显示所有向脚本传递的参数为 $*"

echo "\$@ 使用时加双引号,并且在双引号中返回每个参数 $@"

echo "\$@ 返回\$@中每一个参数"
for index in $@
do
echo $index

done

在终端中执行 sh test1.sh 1 2 3 4 5 6 7 8 9 10 11 12,这个结果中遍历显示参数是没有问题的

speed@localhost ~]$ sh test1.sh 1 2 3 4 5 6 7 8 9 10 11 12
$# 传递到脚本的参数的个数为 12
$* 以一个单字符串显示所有向脚本传递的参数为 1 2 3 4 5 6 7 8 9 10 11 12
$@ 使用时加双引号,并且在双引号中返回每个参数 1 2 3 4 5 6 7 8 9 10 11 12
$@ 返回$@中每一个参数
1
2
3
4
5
6
7
8
9
10
11
12

在终端中执行 sh test1.sh "1 a" "2 b" "3 c" "4 d" "5 e" "6 f" "7 g",这个结果中遍历显示参数是有问题,如何解决呢。
如何让遍历显示参数时,显示结果如下呢
1 a
2 b
3 c
4 d
5 e
6 f
7 g

[speed@localhost ~]$ sh test1.sh "1 a" "2 b" "3 c" "4 d" "5 e" "6 f" "7 g"
$# 传递到脚本的参数的个数为 7
$* 以一个单字符串显示所有向脚本传递的参数为 1 a 2 b 3 c 4 d 5 e 6 f 7 g
$@ 使用时加双引号,并且在双引号中返回每个参数 1 a 2 b 3 c 4 d 5 e 6 f 7 g
$@ 返回$@中每一个参数
1
a
2
b
3
c
4
d
5
e
6
f
7
g

Re: 求解,shell中如何正确使用$@

发表于 : 2011-04-28 16:48
aerofox
要正确使用 $@,就要学会使用双引号。

代码: 全选

for arg in "$@"   # 这里需要双引号
do
    echo "$arg"   # 这里也应该使用双引号
done
其中 echo 语句中的双引号容易被人忽略,而且使用不全面的测试方法时不会发现缺少这个引号有什么问题。

Re: 求解,shell中如何正确使用$@

发表于 : 2011-04-30 19:28
pangding
呵呵,不加引号是惯常错误~~

Re: 求解,shell中如何正确使用$@

发表于 : 2011-05-06 14:38
chengmoYS
了解 谢谢

Re: 求解,shell中如何正确使用$@

发表于 : 2011-05-07 15:28
tusooa
chengmoYS 写了: echo "\$@ 使用时加双引号,并且在双引号中返回每个参数 $@"
你自己都说要加双引号了啊。

Re: 求解,shell中如何正确使用$@

发表于 : 2011-05-08 20:06
scutdk
pangding 写了:呵呵,不加引号是惯常错误~~
学习