寂寞烈火:
这样比较一下
for i in $@;do echo $i;done
for i in "$@";do echo $i;done
for i in $@;do echo $i;done
for i in "$@";do echo $i;done
黑哥:
$@经过参数展开后,还要word splitting,
"$@"经过参数展开后,不再word splitting.
对于"1 2" 4, $@参数展开后:"1 2", "4", word splitting后得到三个字(word): 1, 2,4
"$@"参数展开得到两个字:"1 2","4".
"$@"经过参数展开后,不再word splitting.
对于"1 2" 4, $@参数展开后:"1 2", "4", word splitting后得到三个字(word): 1, 2,4
"$@"参数展开得到两个字:"1 2","4".
Springwind426:
不回引号时, $@ 和 $* 相同
加双引号时
参数: "1 2" 4
"$@" 表示所有的参数,即 "1 2" 4
"$*" 表示把所有的参数扩展并形成一个字符串 "1 2 4"
加双引号时
参数: "1 2" 4
"$@" 表示所有的参数,即 "1 2" 4
"$*" 表示把所有的参数扩展并形成一个字符串 "1 2 4"
- set -- "1 2" 4
- 现在有两个参数: "1 2" 和 4
- for i in $@;do echo "[$i]";done
- [1]
- [2]
- [4]
- 空格没有了
- for i in $*;do echo "[$i]";done
- [1]
- [2]
- [4]
- 空格没有了
- for i in "$@";do echo "[$i]";done
- [1 2]
- [4]
- 完整的两个参数,与你先前输入的参数一样
- for i in "$*";do echo "[$i]";done
- [1 2 4]
- 就剩一个字符串了,但是,第一个参数的空格仍然是保留的。