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.

  

原文地址:https://www.cnblogs.com/scajy/p/12762329.html