That is, "$@" is equivalent to "$1" "$2" ...
注意:$@ 和 "$@" 这两种写法得到的结果可能会有所不同 。$@ 是扩展为 $1 $2 ...,而 "$@" 是扩展为 "$1" "$2" ...
修改上面的 testparams.sh 脚本来举例说明 $@ 和 "$@" 的区别:
#!/bin/bashfunction show_params(){echo $1 , $2 , $3}show_params $@show_params "$@"执行 testparams.sh 脚本,输出结果如下:
$ ./testparams.sh 1a 2b 3c1a , 2b , 3c1a , 2b , 3c$ ./testparams.sh "1 a" "2 b" "3 c"1 , a , 21 a , 2 b , 3 c$ ./testparams.sh 1a 2b1a , 2b ,1a , 2b ,可以看到,当传入脚本的参数值不带空格时,$@ 和 "$@" 得到的结果相同 。
当传入脚本的参数值自身带有空格时,$@ 得到的参数个数会变多,"$@" 可以保持参数个数不变 。
上面的 $1 是 "1 a",$@ 会拆分成 "1" "2" 两个参数,然后传给 show_params 函数;"$@" 会保持为 "1 a" 不变,然后传给 show_params 函数 。
即,"1 a" "2 b" "3 c" 这三个参数,经过 $@ 处理后,得到的是 "1" "a" "2" "b" "3" "c" 六个参数 。
经过 "$@" 处理后,得到的还是 "1 a" "2 b" "3 c" 三个参数 。
同时也看到,即使只传入两个参数,引用 $3 也不会报错,只是会获取为空 。
推荐阅读
- 完整版 Linux技巧:使用bash read命令实现一个简易shell
- 如何在 Mac 上使用 pyenv 运行多个版本的 Python | Linux 中国
- 公司来位腾讯大牛,看完我构建的Spring MVC框架,甩给我一份文档
- Linux这5款微型发行版,体积小+精简,比win7运行还快,值得安装
- Linux磁盘管理超详细
- 手把手教你安装Windows 10之完整篇
- 吃完东西就犯困?科学家解释其中原因
- 看完胎压标示图后不知道如何充气了
- 5 种拆分 Linux 终端的方法
- Linux下查看进程线程数的方法
