shell中$*与$@的区别
2014-02-25 10:28
525 查看
$*
所有的位置参数,被作为一个单词.
$@
与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,
并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的
单词.
$@ 和 $* 只在被双引号包起来的时候才会有差异
双引号括起来的情况:
$*将所有的参数认为是一个字段
$@ 以IFS(默认为空格)来划分字段,如果空格在“”里面,不划分。
下边给个例子看一下:
一、$* 不添加 “”
[webadmin@www testfor]$ vi printFile 1 #!/bin/bash 2 3 var=(1 2 3 4) 4 for fi in ${var[*]}; do 5 echo "-----" 6 echo $fi 7 done 结果: [webadmin@www testfor]$ ./printFile ----- 1 ----- 2 ----- 3 ----- 4
二、$@ 不添加 “”
[webadmin@www testfor]$ vi printFile 1 #!/bin/bash 2 3 var=(1 2 3 4) 4 for fi in ${var[@]}; do 5 echo "-----" 6 echo $fi 7 done 结果: [webadmin@www testfor]$ ./printFile ----- 1 ----- 2 ----- 3 ----- 4
三、$*添加双引号
[webadmin@www testfor]$ vi printFile 1 #!/bin/bash 2 3 var=(1 2 3 4) 4 for fi in "${var[*]}"; do 5 echo "-----" 6 echo $fi 7 done 结果: [webadmin@www testfor]$ ./printFile ----- 1 2 3 4 将所有的参数解析为 一个参数
四、$@ 添加双引号
[webadmin@www testfor]$ vi printFile 1 #!/bin/bash 2 3 var=(1 2 3 4) 4 for fi in "${var[@]}"; do 5 echo "-----" 6 echo $fi 7 done 结果: [webadmin@www testfor]$ ./printFile ----- 1 ----- 2 ----- 3 ----- 4 和 $* , $@没有加上引号的结果一直
五、数据修改:
[webadmin@www testfor]$ vi printFile 1 #!/bin/bash 2 3 var=(1 "2 3" 4) 4 for fi in "${var[@]}"; do 5 echo "-----" 6 echo $fi 7 done 结果: [webadmin@www testfor]$ ./printFile ----- 1 ----- 2 3 ----- 4 将数组中 的 2和3 印在括号内 , 经过$@会解析为一个 字符串参数
综上可以看到 , 我们实际使用中还是使用$@ 是最好的选择
[webadmin@www testfor]$ vi printFile 1 #!/bin/bash 2 3 var=(1 "2 3" 4) 4 for fi in /yazuo_apps/test/ch02/*; do 5 echo "-----" 6 echo $fi 7 done
相关文章推荐
- shell中$@和$*区别
- linux系统中关于shell变量$*与$@的区别
- shell中$@和$*的区别
- shell中$*与$@的区别
- Shell特殊变量:$*和$@的区别
- shell中$*与$@的区别
- shell中$*与$@的区别
- 一个脚本实例浅析shell脚本中$@与$*的区别
- shell中$@与$*的区别
- Linux Bash Shell $*和$@的区别
- shell中$*与$@的区别
- shell脚本中$@与$#区别
- shell中$*和$@的区别
- shell中$*与$@的区别
- shell中$*与$@的区别
- 笑谈区别之--执行Shell脚本的四种方法
- shell中的点命令与source命令的区别
- 一个PATH引出的问题 - 交互式shell和非交换式shell区别
- 转 shell中$(( )) 与 $( ) 还有${ }的区别
- 终端,Shell、tty、console有什么区别?