shell-的特殊变量-难点理论
一:shell的特殊变量-难点理论
1. $*和$@的区别例子
$* 将所有的命令行所有参数视为单个字符串,等同于“$1$2$3”
$@ 将命令行每个参数视为单独的字符串,等同于"$1" "$2" "$3"。这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。
实例:
[root@1-241 scripts]# set -- "I am " handsome oldboy. #传入三个参数 [root@1-241 scripts]# echo $# #现在有三个参数 3 [root@1-241 scripts]# for i in $*; do echo $i;done #循环打印这些参数,用$*,无引号 I am handsome oldboy. [root@1-241 scripts]# for i in $@; do echo $i;done #循环打印这些参数,用$@,无引号 I am handsome oldboy. [root@1-241 scripts]# for i ; do echo $i;done #去掉in变量列表,相当于in “$@” I am handsome oldboy. [root@1-241 scripts]# for i in "$@"; do echo $i;done #在有双引号的情况下,参数里引号内内容当做一个参数输出了,这才真正符合我们传入的参数需求,set -- "I am" handsome oldboy. I am handsome oldboy. [root@1-241 scripts]# for i in "$*"; do echo $i;done #加了双引号,$*表示一个字符串 I am handsome oldboy. [root@1-241 scripts]# shift #用shift去掉第一个参数 [root@1-241 scripts]# for i in "$@"; do echo $i;done #再次打印只剩后面两个参数了 handsome oldboy. [root@1-241 scripts]# for i in "$*"; do echo $i;done handsome oldboy. [root@1-241 scripts]# for i ; do echo $i;done handsome oldboy.