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

sh/bash/dash/ksh/zsh等Shell脚本
回复
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

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

#1

帖子 chengmoYS » 2011-04-28 15:34

脚本 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
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#2

帖子 aerofox » 2011-04-28 16:48

要正确使用 $@,就要学会使用双引号。

代码: 全选

for arg in "$@"   # 这里需要双引号
do
    echo "$arg"   # 这里也应该使用双引号
done
其中 echo 语句中的双引号容易被人忽略,而且使用不全面的测试方法时不会发现缺少这个引号有什么问题。
上次由 aerofox 在 2011-04-30 21:56,总共编辑 1 次。
pangding
帖子: 48
注册时间: 2011-03-01 23:14

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

#3

帖子 pangding » 2011-04-30 19:28

呵呵,不加引号是惯常错误~~
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

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

#4

帖子 chengmoYS » 2011-05-06 14:38

了解 谢谢
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

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

#5

帖子 tusooa » 2011-05-07 15:28

chengmoYS 写了: echo "\$@ 使用时加双引号,并且在双引号中返回每个参数 $@"
你自己都说要加双引号了啊。

代码: 全选

] ls -ld //
scutdk
帖子: 299
注册时间: 2009-07-25 19:23

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

#6

帖子 scutdk » 2011-05-08 20:06

pangding 写了:呵呵,不加引号是惯常错误~~
学习

Ubuntu 桌面培训- 全中文官方文档,含汉化截图,提供PDF
回复