问题

$@$*的区别?

$@代表"$1""$2""$n"的意思,每个变量是独立的,用双引号括起来。
$*代表"$1c$2c$3",其中c是分隔符,默认为空格键。

因为$@把每个变量用双引号括起来了,保证了每个变量之间不会混淆,所以一般情况下只要使用$@就行了。

注意:使用$@时,一定要用双引号括起来!(总之shell编程中引号是多多益善啊)

请看例子,调用为:sh text.sh "1 2" 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

echo $1 # 1 2
echo $2 # 3
echo $* # 1 2 3
echo $@ # 1 2 3
echo "$*" # 1 2 3
echo "$@" # 1 2 3

# 执行时,带入参数"1 2" "3",就会很清晰了.
# 执行时,最外层的双引号会被拿掉

# 没加引号的时候,参数本身的引号就被拿掉了
# for var in 1 2 3
for var in $*
do
echo $var
done
# 1
# 2
# 3

# for var in 1 2 3
for var in $@
do
echo $var
done
# 1
# 2
# 3

# for var in "1 2 3"
for var in "$*"
do
echo $var
done
# 1 2 3

# 加了双引号后$@才表现正常
# for var in "1 2" "3"
for var in "$@"
do
echo $var
done
# 1 2
# 3

参考文章

  • 《鸟哥的Linux私房菜 基础学习篇》